home *** CD-ROM | disk | FTP | other *** search
/ Risc World 3 / Risc World 3.iso / SOFTWARE / ISSUE3 / POWERBASE / PB832 / !Powerbase / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  2002-09-04  |  479KB  |  22,051 lines

  1.  ><PBase$Dir>.!RunImage
  2.  !RunImage for !Powerbase database
  3.  D.L. Haslam & S.R. Haslam
  4.  Heap Manager (module + BASIC)
  5.  S.R. Haslam
  6.  Dial utility
  7.  Justin Fletcher
  8.  Helpreader (system for on-line help text)
  9.  Ben Summers
  10.  New high-res icons for files
  11.  Lenny <lenny@argonet.co.uk>
  12.  http://www.argonet.co.uk/users/lenny/index.html
  13. ,:                                       
  14.  version$="8.32 (04-09-2002)"
  15.  Adapted to comply with anti-aliased desktop font in RISC OS 3.5 & later
  16.  Can use scrollable lists.
  17.  Printing uses RISC OS drivers.
  18.  Direct mail-merging with OvationPro requires v.1.3 of !Impulse applet
  19. ,"Error: "+
  20. $+" during initialisation at line "+
  21.  "Hourglass_On"
  22.  "OS_Byte",228,1
  23.  "OS_Byte",202,0,255 
  24.  ,kbdstatus%
  25.  block% &1C00,msgnum% 4
  26.  "OS_ReadVarVal","Pbase$Dir",block%,255 
  27. !?block%?L%=13:program$=
  28. leaf($block%):progname$=
  29. program$,2)
  30. PbaseDir$=leafnamepath$
  31.  program$ automatically reflects whatever name application is called
  32.  It is used in Wimp_Initialise so this name appears on task list
  33.  Also inserted into Info box.
  34. check_resources:
  35.  ### Check for missing files ###
  36.  ### All present & correct. Initialise Wimp & Impulse module ###
  37. $block%="TASK":!msgnum%=0
  38. mask%=(1<<4)+(1<<5)
  39.  "Wimp_Initialise",300,!block%,progname$,msgnum% 
  40.  version%,mytask%
  41.  version%<310 
  42.  0,"This version of Powerbase is only suitable for RISC OS 3.10 or greater. Contact Powerbase Support for a suitable version."
  43.  "Impulse_Initialise",003,mytask%,"Powerbase",-1
  44.  Do NOT use progname$ here or client tasks trying to interrogate
  45.  "Powerbase" will not have their Impulse commands recognized!
  46. initheaps(128,128)
  47.  ### Load message file so that 'proper' error-handler can be used ###
  48.  msgbuff% &100,param$(3),att$(3)
  49. 2'f$="<PBase$Dir>.Resources.Messages"
  50.  "MessageTrans_FileInfo",,f$ 
  51.  flags%,,len%
  52.  errormsg% len%
  53.  "OS_Module",6,,,17+
  54. (f$) 
  55.  ,,filedesc%
  56. $(filedesc%+16)=f$
  57.  "MessageTrans_OpenFile",filedesc%,filedesc%+16,errormsg%
  58. 8 fatal_err%=255:moan_err%=254
  59. wimp_error(
  60.  Mi% 20,Mo% 20
  61. getscreensize(ScreenWidth%,ScreenHeight%,Vpix%)
  62.  "XWimp_ReadSysInfo",8 
  63.  Desktopfont%;flags%
  64.  (flags% 
  65.  Desktopfont%=0
  66.  ### Load private sprites ###
  67.  "OS_File",5,"<PBase$Dir>.Resources.Sprites22" 
  68.  d%,,,,len%
  69.  sprites% len%+4
  70. !sprites%=len%+4
  71. load_sprites
  72.  ### Get Internet addresses ###
  73. ("<Pbase$Dir>.Resources.Internet")
  74. Web$=
  75. #F:Email$=
  76. close_file(F)
  77. get_configuration("<Pbase$Dir>.Resources.Config","main")
  78. dim_arrays(MaxFields%+12,MaxKeys%,MaxTabs%,MaxCols%,MaxLists%,MaxLibs%)
  79. printer_palette
  80. allocate_buffers
  81. load_functionkeys
  82. init_vars
  83. create_anchors
  84. impulse_methods
  85. create_windows
  86. make_menus
  87. get_defaults
  88. select(prefsW%,36):
  89. deselect(prefsW%,35):
  90. shade(prefsW%,35,
  91. select(csvW%,19):
  92. deselect(csvW%,18)
  93. scroll_icons(MaxCols%)
  94.  "OS_ReadMonotonicTime" 
  95.  ReturnAfter%
  96. ReturnEvery%=100
  97. ReturnAfter%+=ReturnEvery%
  98. banner
  99. iconbar_icon("")
  100. ^9present%=
  101. :library$="":toolheight%=770:padheight%=316
  102. find_libraries(CustDir$,MaxSize%,NextLib%,MaxLibs%)
  103.  ### Respond to double-click on database when Powerbase not yet running ###
  104.  "OS_GetEnv" 
  105.  ComString$
  106. ComString$,"-database") 
  107. d4  File$=
  108. ComString$,
  109. ComString$,"-database")+10)
  110.  "OS_GSTrans",File$,
  111. 13),255 
  112.  ,File$,L%
  113.   File$=
  114. File$,L%)
  115. get_it_in(File$)
  116. shade(passW%,17,
  117.  Allows use of Access Control List. Change to FALSE if not wanted
  118. set_return
  119. wimp_error(
  120.  ### Establish place to jump back to once we start polling ###
  121.  ### Now ready to roll! ###
  122.  "Hourglass_Off"
  123. poll(
  124.  quit%
  125. close_down
  126. poll(idle%)
  127.  "OS_Byte",229,1:
  128.  "OS_Byte",124
  129.  idle% 
  130.  "Wimp_PollIdle",mask%,block%,ReturnAfter% 
  131.  reason%
  132.  "Wimp_Poll",mask%,block% 
  133.  reason%
  134.  reason% 
  135.  autosave%>0 
  136.  Access%=
  137. check_save(
  138. ($Interval%))
  139.  Impulse_wait% 
  140.  merging% 
  141. start_merge(mergeW%)
  142.  flash%>0 
  143. &    
  144. invert(mainW%,field%(flash%))
  145.  OLE%>0 
  146. check_date_stamp
  147. set_return
  148. redraw(!block%)
  149. open_it(!block%)
  150. close_it(!block%)
  151. mouse(block%!0,block%!4,block%!8,block%!12,block%!16)
  152. end_drag
  153. process_key
  154. menu_select
  155.  !block%=mainW% 
  156.  returnto%=block%!4:
  157.  "OS_Byte",202,caps%,111
  158. set_keyboard(!block%,block%!4)
  159.  17,18:
  160.  "Impulse_Decode",reason%,block%,,,,methodtable%,mytask% 
  161.  reason%,,,,,token%,params%,object%
  162.  reason%>=&200 
  163.  reason% 
  164. V      
  165.  &200,&201:
  166.  token%<>-1 
  167. Impulse_command_received(token%,params%,object%)
  168. /      
  169.  &202:
  170. Impulse_reply(token%,params%)
  171. .      
  172.  &203:
  173. Impulse_send(token%,object%)
  174. 9      
  175.  &204:
  176. Impulse_receive(token%,params%,object%)
  177.         
  178. message
  179. not_acknowledged
  180. complete(N%)
  181.  Allows windows to redraw inside long procedures
  182.  I%=1 
  183. poll(
  184. check_date_stamp
  185.  "OS_File",5,OLE$ 
  186.  ,,,r3%
  187.  r3%<>OLEDS% 
  188. update_external(REC%):OLEDS%=r3%
  189. set_return
  190.  time%
  191.  "OS_ReadMonotonicTime" 
  192.  time%
  193.  time%-ReturnAfter%>0
  194.    ReturnAfter%+=ReturnEvery%
  195.  Shutdown routines ---------------------------------------------------
  196. close_down
  197. #0:$block%="TASK":
  198.  "Wimp_CloseDown",mytask%,!block%:
  199. ,"Error: "+
  200. $+" during closedown at line "+
  201.  "Hourglass_Smash"
  202.  "Impulse_CloseDown",mytask%
  203. $block%="TASK"
  204.  "Wimp_CloseDown",mytask%,!block%
  205.  "OS_Byte",202,kbdstatus%
  206.  flags%,F,Postpone%
  207.  special%(10) 
  208. (libfunc$+"_function(10)")
  209.  Postpone% 
  210.  "Hourglass_Smash"
  211.  "OS_File",5,$database% 
  212.  d%=2 
  213.  "XOS_Find",128,$database%+".Junk" 
  214.  F;flags%
  215.  (flags% 
  216.  1)=0 
  217. @    
  218. close_file(F):
  219.  "OS_CLI","Remove "+$database%+".Junk" 
  220.  present%=7 
  221.       
  222. save_marks
  223.       
  224. save_winpos
  225. /      
  226.  ramwarn% 
  227.  ram% 
  228. softerror("",63)
  229.         
  230. F    
  231.  design% 
  232.  protect% 
  233.  force% 
  234. save_form($database%+".Form")
  235. %    
  236.  altered% 
  237. save_everything
  238. memory_usage
  239. auto_csv(
  240.      
  241. blob_deleterestore("D")
  242. close_files
  243.     link$()="":calc$()=""
  244. #    
  245. close_log("<Log$Dir>.Log")
  246. softerror("",218)
  247.  $database%<>"No data" 
  248. softerror("",145)
  249. kill_scrollers(
  250. hide_windows
  251. delete_icons(mainW%,0)
  252. delete_icons(numscrollW%,0)
  253.  ic%=24 
  254. text(keypadW%,ic%)=""
  255. deselect(matchW%,4):
  256. deselect(matchW%,6):
  257. deselect(matchW%,12)
  258. recover_memory
  259. init_vars
  260. get_defaults
  261. read_colours("<Pbase$Dir>.Resources.FieldCols")
  262. CSHkeyptr%()=-1:SHtabptr%()=-1:SHundoptr%()=-1:SHscrollptr%()=-1
  263. $Subfilename%="Subfile 0"
  264. $NewName%="!NewName"
  265. select(prefsW%,36):
  266. deselect(prefsW%,35):
  267. shade(prefsW%,35,
  268.  I%=0 
  269.  LastTable%
  270.   printrel$(I%)=""
  271.  tableW%(I%)>0 
  272.  !block%=tableW%(I%):
  273.  "Wimp_DeleteWindow",,block%
  274.   tableW%()=0:TabTitle%()=0
  275. tableW%()=0:TabTitle%()=0
  276. field$()=""
  277. $Password%=""
  278. $$Records%="100":$Increment%="25"
  279. present%=
  280. exit%=
  281.  I%=0 
  282. lit(utilityM%,I%,
  283. lit(iconbarM%,1,
  284. lit(iconbarM%,2,
  285. lit(iconbarM%,3,
  286. lit(iconbarM%,4,
  287. lit(validateM%,1,
  288. ):ptr%=validateM%+52:ptr%!4=-1
  289. lit(indexM%,1,
  290. ):ptr%=indexM%+52:ptr%!4=-1
  291. lit(printM%,5,
  292. lit(printM%,7,
  293. lit(printM%,8,
  294. lit(printM%,9,
  295. lit(mainM%,7,
  296. text(prefsW%,45)="":
  297. shade(prefsW%,45,
  298.  "OS_CLI","Unset Acl$Dir"
  299.  "OS_CLI","Unset Log$Dir"
  300.  "OS_CLI","Unset Dbase$Dir"
  301. $database%="No data"
  302. iconbar_icon("No data")
  303. special%()=
  304. save_everything
  305.  Access% 
  306. save_links
  307. save_calcs
  308. save_subfilenames
  309. save_keys
  310. save_all_tables
  311.   changed%=
  312. update_calcs(0)
  313. asterisk(
  314. delete_icons(wi%,ic%)
  315. !block%=wi%:block%!4=ic%
  316.  "Wimp_DeleteIcon",,block%
  317.   ic%+=1:block%!4=ic%
  318.  "Wimp_GetIconState",,block%
  319.  ((block%!24) 
  320.  (1<<23))>0
  321. close_files
  322.  Check all file-handles from 1-255 for open files
  323.  Check if open files belong to Powerbase or the database
  324.  If so, close them and report
  325.  F%,V%,P%,F$
  326.  F%=1 
  327.  "XOS_Args",7,F%,block%,,,256 
  328.  (V% 
  329.  1)=0 
  330.     P%=0
  331.  P%+=1
  332.  block%?P%=0
  333.     block%?P%=13
  334. 39    
  335. $block%,program$)>0 
  336. $block%,$database%)>0 
  337. 4(      F$=
  338. "   "+
  339. (F%),3)+" "+$block%
  340.       
  341. 6S      
  342. wimp_error(
  343. ,254,0,"File "+F$+" was left open. It has now been closed.")
  344. 7        
  345. close_file(printhandle%)
  346. close_file(csvhandle%)
  347.  Need to close printer file explicitly since pathname doesn't show
  348.  any connection with Powerbase or database
  349. close_file(
  350.  filehandle%)
  351.  filehandle%>0 
  352. #filehandle%
  353.   filehandle%=0
  354. recover_memory
  355. scrap_block(headanchor%)
  356. scrap_block(lineanchor%)
  357. scrap_block(textanchor%)
  358. scrap_block(formanchor%)
  359. scrap_block(selanchor%)
  360. scrap_block(tempanchor%)
  361. scrap_block(balanchor%)
  362. scrap_block(flaganchor%)
  363. scrap_block(transanchor%)
  364. scrap_block(sprsanchor%)
  365. scrap_block(titleanchor%)
  366. scrap_block(recanchor%)
  367. scrap_block(saveanchor%)
  368. scrap_block(logoanchor%)
  369. scrap_block(fieldmenuanchor%)
  370. scrap_block(usermenuanchor%)
  371. scrap_block(tablemenuanchor%)
  372. scrap_block(indexmenuanchor%)
  373. scrap_block(markanchor%)
  374. scrap_block(blankanchor%)
  375. scrap_block(fontanchor%)
  376. scrap_block(urlanchor%)
  377. scrap_block(sortanchor%)
  378.  I%=0 
  379.  MaxTabs%
  380. scrap_block(tabanchor%(I%))
  381. scrap_block(undoanchor%(I%))
  382.  I%=0 
  383.  MaxKeys%+1
  384. scrap_block(keyanchor%(I%))
  385.  I%=0 
  386.  MaxLists%-1
  387. scrap_block(scrollanchor%(I%))
  388.  I%=1 
  389.  fields%
  390.  present%=7 
  391.  chartype%(I%)=40 
  392. scrap_block(Rf%(I%))
  393.  Error handling ------------------------------------------------------
  394. wimp_error(return%,err%,erl%,err$)
  395.  type%,result%
  396. close_down:
  397. ,"Error: "+
  398. $+" during error handler at line "+
  399.  "Wimp_CommandWindow",-1
  400. block%!0=err%
  401.  return% 
  402.  err%<>fatal_err% 
  403.  err%=moan_err% 
  404. y9    type%=17:
  405.  OK button and no "Error from" in title
  406. z        
  407. {'    type%=3:
  408.  OK and Cancel buttons
  409. |@    err$+=" at "+
  410. (erl%)+" (OK to continue, Cancel to quit)"
  411.   type%=2:
  412.  Cancel buttom
  413. ,  err$+=" (Powerbase must quit at once)"
  414. close_files
  415. recover_memory
  416. $(block%+4)=err$+
  417.  "Wimp_ReportError",block%,type%,"Powerbase"+
  418.  ,result%
  419.  result=1 means OK selected, 2 means Cancel selected
  420.  result%=2 
  421. close_down
  422. softerror(E$,E%)
  423.  E%>0 
  424.   M$="Err"+
  425.  E$<>"" 
  426.  M$+=","+E$
  427.   $(block%+4)=
  428. msg(M$)
  429.  $(block%+4)=E$
  430. !block%=255
  431.  "Wimp_ReportError",block%,1+(1<<8)+(1<<9),"Powerbase","!pbaseda"
  432. confirm(string$)
  433. !block%=255
  434. $(block%+4)=string$+
  435.  "Wimp_ReportError",block%,19,"Powerbase: please confirm"+
  436.  ,result%
  437. =result%=1
  438. inform(M$,M%,T%)
  439.  M$="" 
  440. text(informW%,0)=
  441. msg("Err"+
  442. (M%))
  443. text(informW%,0)=M$
  444. position_window(informW%,0,0,0,0,0,0)
  445. complete(4)
  446.  T%>0 
  447. (T%*100):
  448. close_window(informW%)
  449.  ### Use MessageTrans to display a message from the Messages file ###
  450. msg(token$)
  451.  result$,msgparams$,S$,P%,Q%,p%
  452. param$()=""
  453. token$,",")
  454.  P%>0 
  455. "  msgparams$=
  456. token$,P%+1)+","
  457.   token$=
  458. token$,P%-1)
  459.   P%=0
  460.     Q%=P%+1
  461.     P%=
  462. msgparams$,",",Q%)
  463.  P%>0 
  464. "      S$=
  465. msgparams$,Q%,P%-Q%)
  466. !      S$=
  467. replace(S$,"\",",")
  468.       param$(p%)=S$
  469.       p%+=1
  470.         
  471.  P%=0
  472.  "MessageTrans_Lookup",filedesc%,token$,msgbuff%,&100,param$(0),param$(1),param$(2),param$(3) 
  473.  ,,result$
  474. =result$
  475. replace(S$,found$,with$)
  476.   P%=
  477. S$,found$)
  478.  P%>0 
  479. S$,P%,1)=with$
  480.  P%=0
  481. asterisk(on%)
  482.  on% 
  483. $RecInfo%)<>"*" 
  484.  $RecInfo%+=" *":ramwarn%=
  485. $RecInfo%)="*" 
  486.  $RecInfo%=
  487. $RecInfo%))
  488. altered%=on%
  489. E!block%=mainW%:
  490.  "Wimp_GetWindowOutline",,block%:ymax%=block%!16
  491.  "Wimp_GetWindowState",,block%
  492.  "Wimp_ForceRedraw",-1,block%!4,block%!16,block%!12,ymax%
  493. create_anchors
  494. )headanchor%=
  495. create_anchor("Heading")
  496. *lineanchor%=
  497. create_anchor("TextLine")
  498. &textanchor%=
  499. create_anchor("Text")
  500. &formanchor%=
  501. create_anchor("Form")
  502. .sprsanchor%=
  503. create_anchor("DbaseSprites")
  504. -titleanchor%=
  505. create_anchor("DbaseTitle")
  506. &tempanchor%=
  507. create_anchor("Temp")
  508. (balanchor%=
  509. create_anchor("Balance")
  510. 'flaganchor%=
  511. create_anchor("Flags")
  512. /transanchor%=
  513. create_anchor("DataTransfer")
  514. )selanchor%=
  515. create_anchor("PrintSel")
  516. *recanchor%=
  517. create_anchor("RecordNum")
  518. ,saveanchor%=
  519. create_anchor("SaveBuffer")
  520. &logoanchor%=
  521. create_anchor("Logo")
  522. 0fieldmenuanchor%=
  523. create_anchor("FieldMenu")
  524. .usermenuanchor%=
  525. create_anchor("UserMenu")
  526. 0tablemenuanchor%=
  527. create_anchor("TableMenu")
  528. 0indexmenuanchor%=
  529. create_anchor("IndexMenu")
  530. &markanchor%=
  531. create_anchor("Mark")
  532. (blankanchor%=
  533. create_anchor("Blank")
  534. 'fontanchor%=
  535. create_anchor("Fonts")
  536. $urlanchor%=
  537. create_anchor("URL")
  538. &sortanchor%=
  539. create_anchor("Sort")
  540.  I%=0 
  541.  MaxKeys%+1
  542. 2  keyanchor%(I%)=
  543. create_anchor("Key #"+
  544. (I%))
  545.  I%=0 
  546.  MaxTabs%
  547. 5  tabanchor%(I%)=
  548. create_anchor("VTable #"+
  549. (I%))
  550. :  undoanchor%(I%)=
  551. create_anchor("UndoVTable #"+
  552. (I%))
  553.  I%=0 
  554.  MaxLists%-1
  555. :  scrollanchor%(I%)=
  556. create_anchor("Scroller #"+
  557. (I%))
  558. impulse_methods
  559.  PASS=0 
  560. P%=methodtable%
  561.   [OPT PASS
  562.         equd    0
  563. )        
  564. method(0,1,"GetPathname","")
  565. '        
  566. method(0,2,"Selection","")
  567. (        
  568. method(0,3,"ParseQuery","")
  569. '        
  570. method(0,4,"GetRecord","")
  571. '        
  572. method(0,5,"PutRecord","")
  573. (        
  574. method(0,6,"ExpandCode","")
  575. &        
  576. method(0,7,"GetField","")
  577. )        
  578. method(0,8,"GetExpanded","")
  579. '        
  580. method(0,9,"NextMatch","")
  581.          
  582. method(-1,-1,"","")
  583.  PASS
  584. method(Flags,Token,Method$,Syntax$)
  585. [OPT PASS
  586.         equd    Flags
  587.         equd    Token
  588.          equs    Method$+
  589.          equs    Syntax$+
  590.         align
  591.     =PASS
  592. iconbar_icon(name$)
  593.  len%,old%
  594.  name$ 
  595. 3  $dbase%="No data":len%=
  596. string_width($dbase%)
  597. \  pbaseicon%=
  598. create_icon(0,-1,0,-16,len%,110,&1700312B,"",dbase%,psprite%,
  599. ($dbase%)+1)
  600. /  $dbase%=name$:len%=
  601. string_width($dbase%)
  602.   old%=pbaseicon%
  603. _  pbaseicon%=
  604. create_icon(old%,-3,0,-16,len%,110,&1700312B,"",dbase%,psprite%,
  605. ($dbase%)+1)
  606.   !block%=-1:block%!4=old%
  607.  "Wimp_DeleteIcon",,block%
  608. load_sprites
  609.  Loads private sprites during program initialisation
  610.  Also called if screen resolution changes
  611.  x%,y%,f$,f1$
  612.  "OS_ReadModeVariable",-1,4 
  613.  ,,x%
  614.  "OS_ReadModeVariable",-1,5 
  615.  ,,y%
  616.  x%=1 
  617.  y%=1 
  618.  f$="!Sprites22":f1$="Sprites22"
  619.  (x%=2 
  620.  y%=2) 
  621.  (y%<>x%) 
  622.  f$="!Sprites":f1$="Sprites"
  623.  "OS_CLI","IconSprites <Pbase$Dir>."+f$
  624.  "OS_File",255,"<PBase$Dir>.Resources."+f1$,sprites%+4
  625. banner
  626.  d%,F,S$,f$
  627. text(bannerW%,6)="v. "+version$
  628. 2'f$="<Pbase$Dir>.Resources.Temp.pbr"
  629.  "OS_File",5,f$ 
  630.  d%=1 
  631. register
  632.  "OS_File",5,"<Pbase$Dir>.reg" 
  633.  d%=1 
  634. ("<Pbase$Dir>.reg")
  635. #F,S$:S$=
  636. encrypt(S$,
  637. close_file(F)
  638. :/  $
  639. text(infoW%,9)=S$:$
  640. text(bannerW%,5)=S$
  641. ;1  $
  642. text(bannerW%,2)="":$
  643. text(bannerW%,3)=""
  644. <+  $
  645. text(bannerW%,4)="Registered user:"
  646. set_icon_cols(infoW%,9,23)
  647.  d%=0 
  648.  Bannertime%>0 
  649. position_window(bannerW%,0,0,0,0,0,0)
  650. complete(10)
  651. >500 
  652.  (d%=1 
  653. >Bannertime%)
  654.  Display 5 sec for unregistered copy, otherwise for configured time
  655.  Skip banner altogether if registered & configured time=0
  656. close_window(bannerW%)
  657. title(area%,x%,y%,ww%,wh%)
  658.  sw%,sh%,mult%,div%,factor,ex%,ey%
  659. "OS_SpriteOp",512+40,area%,area%+area%!8 
  660.  ,,,sw%,sh%
  661. sw%=sw%*2:sh%=sh%*2
  662. r1%=ww%/sw%:r2%=wh%/sh%
  663.  r1%<=r2% 
  664.   mult%=ww%:div%=sw%
  665.  mult%=wh%:div%=sh%
  666.  mult%=mult%*0.9
  667. U x%+=(ww%-sw%*mult%/div%) 
  668. V y%+=(wh%-sh%*mult%/div%) 
  669. W=!scale%=mult%:scale%!4=mult%:scale%!8=div%:scale%!12=div%
  670.  "ColourTrans_SelectTable",area%,area%+area%!8,-1,-1,wdtrans%,3
  671.  "OS_SpriteOp",512+52,area%,area%+area%!8,x%,y%,0,scale%,wdtrans%
  672. get_defaults
  673.  path$
  674. ^"path$="<Pbase$Dir>.Resources."
  675. get_configuration(path$+"Config","main")
  676. get_preferences(prefsW%,path$+"Preference")
  677. get_csv_options(path$+"CSVoptions")
  678. get_options(printW%,printerW%,path$+"!PrintOpts")
  679. allocate_buffers
  680. f(indirectionmem%=&6000:menumem%=&3000
  681.  buffbase% indirectionmem%:endbuff%=buffbase%+indirectionmem%:buff%=buffbase%
  682.  menuindir% &100:menubuff%=menuindir%
  683.  iconblock% &100,paneblock% &600,savebuff% &400,choices% &100,remember% &1000
  684.  menblk% menumem%:men_end%=menblk%+menumem%:menu_ptr%=menblk%
  685.  methodtable% 256:
  686.  For Impulse module
  687.  utctime% 5,datebuffer% 16,dateformat% 16,ordinals% 36:
  688.  For date & time
  689.  date% 6:$date%=
  690. (0)):
  691.  For subfile updates
  692.  key 256,calcrow% 128,hide% 128,mandatory% 128,zerolen% 128,displayit% 128
  693.  fontbuff% &100
  694.  menhelpblock% &100
  695.  paint% 8:$paint%="file_ff9"
  696.  winsp% 20:$winsp%="R5;Swindow,pwindow"
  697.  hand% 16:$hand%="Pptr_hand,4,0"
  698.  writep% 16:$writep%="Pptr_write,4,4"
  699.  writenum% 20:$writenum%="Pptr_write,4,4;A0-9"
  700.  tick% 12:$tick%="Snull,yes"
  701.  dbase% 20:$dbase%="No data"
  702.  psprite% 15:$psprite%="S!"+progname$
  703.  menspr% 30,mentxt% 1:$menspr%="Sgright,pgright;Pptr_menu;R5":$mentxt%=""
  704.  winspr% 20,wintxt% 1:$winspr%="R5;Swindow":$wintxt%=""
  705.  transform% 16,rectangle% 16,rectangle2% 16:
  706.  For printer
  707.  origin%(4):
  708.  For printer
  709.  I%=1 
  710.  P% 8:origin%(I%)=P%
  711.  scale% 16,wdtrans% 256
  712.  Pcol% 4
  713. dim_arrays(F%,K%,T%,C%,L%,LB%)
  714.  desc%(F%),Tag$(F%),field%(F%+1),F$(F%),Rf%(F%)
  715.  len%(F%),maxlen%(F%),truelen%(F%),diff%(F%),maxlenP%(F%),Tab%(F%),Tab2%(F%)
  716.  numeric%(F%),chartype%(F%),fix%(F%)
  717.  link$(F%),calc$(F%),field$(F%),cfield$(F%),update$(F%)
  718.  ephemera$(9,4)
  719.  Date%(5)
  720.  Index$(K%+1),KL%(K%+1),KW%(K%+1,3),KF%(K%+1,3)
  721. 3Index$(0)="PrimaryKey":Index$(K%+1)="Temporary"
  722.  key$(K%+1),case%(K%+1),incspace%(K%+1),null%(K%+1)
  723.  keyfield%(3),WD%(3),Ext%(10)
  724.  Label$(48,20)
  725.  ftypeM%(7),fmenu$(7),flist%(7),choice$(4)
  726.  table$(T%+1),tableW%(T%),TabTitle%(T%),printrel$(T%)
  727.  tabfieldlen%(C%),rel%(C%),tabhead$(C%,1)
  728.  fcol%(10),wimpcol%(15)
  729.  Subfile%(5),filemem%(5,K%)
  730.  buttonfield%(1,28),winbuff%(4,1)
  731.  live%(20)
  732. MC%=30:
  733.  L%(MC%)
  734.  menfield%(30,1)
  735.  SHkeyptr%(K%+1),keyanchor%(K%+1)
  736.  SHtabptr%(T%),SHundoptr%(T%),tabanchor%(T%),undoanchor%(T%)
  737.  scrollerW%(L%-1),scrolldata%(L%-1,9),sclen%(L%-1,3)
  738.  SHscrollptr%(L%-1),scrollanchor%(L%-1)
  739.  lib$(LB%),lib%(LB%),special%(10):special%()=
  740.  scroller_ptr%(L%-1),pending%(L%-1),scrcol%(L%-1)
  741. init_vars
  742. SHclaim%=4096
  743. 5SHtextptr%=0:SHrecptr%=0:SHheadptr%=0:SHurlptr%=0
  744. 4SHformptr%=0:SHsaveptr%=0:SHfontmenu%=0:fontM%=0
  745. 8caps%=16:filemem%()=-1:dragbutt%=0:direc%=1:userM%=0
  746. vfirstsearch%=
  747. :firstfilter%=
  748. :protect%=
  749. :force%=
  750. :qbe%=
  751. :valstatus%=
  752. :clip%=
  753. :pasting%=
  754. :returnto%=-1:ShowTools%=
  755. 1getrec%=213:ClientSearch$="TRUE":ClientPtr%=0
  756. RImpulse_wait%=
  757. :merging%=
  758. :mergenum%=0:document$="":importingcsv%=
  759. :Run_It$=""
  760. -mergetag%=214:transtag%=215:printtag%=216
  761. 8flash%=
  762. :logosloaded%=
  763. :logging%=
  764. :acl%=
  765. :up_pend%=
  766. `accessbutton%=0:stop%=
  767. :customise%=
  768. :valtablesM%=0:indicesM%=0:undo%=
  769. :filter%=
  770. :reformat%=
  771. &displayed%=-1:scratchpad$="":k$=""
  772. oSearch$="TRUE":Filter$="TRUE":query$="ALL":SearchKey$="":REC%=-1:usekey%=-1:useval$="":ResKEY$="":ResREC%=0
  773. greal$="":visible$="":val$="":calcfield%=0:savefunc$="":savetofile%=
  774. :writetable%=
  775. :writescroller%=
  776. @password$="":pw%=0:my_ref%=-1:Type%=0:fieldtype%=1:Length%=0
  777. Bprinting%=
  778. :indexing%=
  779. :not%=
  780. :dontincrement%=
  781. :updatethese%=
  782. -export%=
  783. :csvconv%=
  784. :mergefiles%=
  785. :OLE%=0
  786. 7autosave%=0:autobalance%=
  787. :dupwarn%=
  788. :duplicates%=0
  789. $sorton%=0:sortfield%=0:nosort%=
  790. .present%=0:fields%=0:template%=0:adjust%=
  791. 7Listed%=
  792. :writingcsv%=
  793. :writingtext%=
  794. :calcerror%=
  795. #autocsvhandle%=0:printhandle%=0
  796. "movetype%=8:movetype$="Move 
  797. vquit%=
  798. :exit%=
  799. :matching%=
  800. :newrec%=
  801. :val%=
  802. :ram%=
  803. :Access%=
  804. :Modify%=
  805. :ramwarn%=
  806. :altered%=
  807. :design%=
  808. :newtree%=
  809. HLenLine%=0:Count%=0:labcount%=0:Printable%=0:Start%=0:End%=0:Fptr%=0
  810. 0Fieldnumber%=0:Lastwritable%=0:starthere%=-1
  811. ALastTable%=-1:Tablenumber%=0:TabsLoaded$="Tables":table$()=""
  812. 5Rows%=0:TabFields%=0:Rec%=0:Match_tag%=1:fast%=10
  813. WKeys%=0:keylimit%=1:keylen%=1:LH%=90:addr=-1:file%=0:key%=0:top=8*file%+LH%:RA%=100
  814. +keyfunc$="":fieldfunc$="":Keys%=0:RU%=0
  815. Rprintorder$="":Form$="":ImpCom$="":format$="horiz":shrink%=
  816. :shrinkscroller%=
  817. EFilename$="":TextName$="":extrakeys$="":extratabs$="":Indices$=""
  818. !Days$="SunMonTueWedThuFriSat"
  819. 2Months$="JanFebMarAprMayJunJulAugSepOctNovDec"
  820. 'nonleap$="312831303130313130313031"
  821. $leap$="312931303130313130313031"
  822. SaveCount%=0
  823. BScrollnum%=0:Scroller%=0:ScrollChanged%=
  824. :Scrcol%=0:Scrcol$=""
  825.  I%=0 
  826.  125 
  827. >  hide%!I%=0:mandatory%!I%=0:zerolen%!I%=0:displayit%!I%=0
  828. nosave%=
  829. :dragfield%=0
  830. Ecalc%=0
  831. oldwindow%=0:oldicon%=0
  832. dbtype$="new"
  833. menunumber%=0:lasttype%=0
  834. printer_palette
  835.  I%=0 
  836.  wimpcol%(I%)
  837.  &ffffff00,&dedede00,&bababa00,&99999900
  838.  &78787800,&54545400,&33333333,&00000000
  839.  &ff000000,&00ffff00,&00ff0000,&0000ff00
  840.  &80eded00,&00875400,&00baff00,&ffba0000
  841.  Window handling -----------------------------------------------------
  842. create_windows
  843.  "Wimp_OpenTemplate",,"<Pbase$Dir>.Resources.Templates"
  844. +bannerW%=
  845. new_window("banner",sprites%)
  846.  infoW%=
  847. new_window("info",1)
  848. text(infoW%,4)=progname$:$
  849. text(infoW%,7)=version$
  850.  Tools%=1 
  851.  name$="keypad" 
  852.  name$="toolpane"
  853. 9keypadW%=
  854. new_window(name$,sprites%):Title%=block%!72
  855. zsavesubW%=
  856. new_window("savesub",sprites%):SubName%=
  857. text(savesubW%,2):SubSprite%=
  858. val(savesubW%,0):SubTitle%=block%!72
  859. UsaveW%=
  860. new_window("save",1):SaveName%=
  861. text(saveW%,2):SaveSprite%=
  862. val(saveW%,0)
  863. xaccessW%=
  864. new_window("access",sprites%):UserID%=
  865. text(accessW%,0):Password%=
  866. text(accessW%,1):AccessTitle%=block%!72
  867. passW%=
  868. new_window("password",sprites%):Read%=
  869. text(passW%,2):Write%=
  870. text(passW%,3):Manager%=
  871. text(passW%,5):LogSprite%=
  872. val(passW%,19)
  873. BaclW%=
  874. new_window("aclist",sprites%):AclSprite%=
  875. val(aclW%,15)
  876. :mainW%=
  877. new_window("main",sprites%):RecInfo%=block%!72
  878. >keyW%=
  879. new_window("keystruc",sprites%):KeyTitle%=block%!72
  880. BchangeW%=
  881. new_window("change",sprites%):ChangeTitle%=block%!72
  882. 'moveW%=
  883. new_window("move",sprites%)
  884. NtabcreateW%=
  885. new_window("tabcreate",sprites%):tabcol%=
  886. text(tabcreateW%,8)
  887. $scrollW%=
  888. new_window("scroll",0)
  889. .numscrollW%=
  890. new_window("scroll",sprites%)
  891. linkW%=
  892. new_window("link",sprites%):LinkTitle%=block%!72:Tablename%=
  893. text(linkW%,0):fieldnum%=
  894. text(linkW%,2):substitute%=
  895. text(linkW%,10)
  896. OmiscW%=
  897. new_window("misc",1):database%=
  898. text(miscW%,1):$database%="No data"
  899.  ic%=2 
  900. $  Date%(ic%-2)=
  901. text(miscW%,ic%)
  902.  ic%=28 
  903. (  Subfile%(ic%-28)=
  904. text(miscW%,ic%)
  905. Oused%=
  906. text(miscW%,17):filesize%=
  907. text(miscW%,18):percent%=
  908. text(miscW%,14)
  909. )printW%=
  910. new_window("print",sprites%)
  911. ;matchW%=
  912. new_window("match",sprites%):oldquery%=matchW%
  913. 'listW%=
  914. new_window("list",sprites%)
  915. XcreateW%=
  916. new_window("create",sprites%):FtitleText%=block%!72:$FtitleText%="Field 0"
  917. DescText%=
  918. text(createW%,4):TagText%=
  919. text(createW%,5):LenText%=
  920. text(createW%,6):ValText%=
  921. text(createW%,28):InsText%=
  922. text(createW%,26)
  923. )Fixpt%=
  924. text(createW%,13):$Fixpt%="2"
  925. ;mintext%=
  926. text(createW%,15):maxtext%=
  927. text(createW%,25)
  928. dboxX%=
  929. text(createW%,7):boxY%=
  930. text(createW%,8):boxW%=
  931. text(createW%,9):boxH%=
  932. text(createW%,10)
  933. ArelateW%=
  934. new_window("relation",sprites%):RelTitle%=block%!72
  935. +reformW%=
  936. new_window("reform",sprites%)
  937.  ReformSprite%=FNval(reformW%,0):$ReformSprite%="snew_appl;Pptr_hand,4,0;R2"
  938. ZOriginal%=
  939. text(reformW%,3):Reformatted%=
  940. text(reformW%,6):Newform%=
  941. text(reformW%,12)
  942. RmergebaseW%=
  943. new_window("mergebase",sprites%):MergeSprite%=
  944. val(mergebaseW%,7)
  945.     &colW%=
  946. new_window("cols",sprites%)
  947. read_colours("<Pbase$Dir>.Resources.FieldCols")
  948. VcalcW%=
  949. new_window("calc",sprites%):CalcForm%=
  950. text(calcW%,0):CalcTitle%=block%!72
  951. -printerW%=
  952. new_window("printer",sprites%)
  953. -pselectW%=
  954. new_window("pselect",sprites%)
  955. 2extracalcW%=
  956. new_window("extracalcs",sprites%)
  957. FmergeW%=
  958. new_window("merge",sprites%):ImpulseApp%=
  959. text(mergeW%,9)
  960. PsizeW%=
  961. new_window("size",sprites%):Records%=
  962. text(sizeW%,1):$Records%="100"
  963. /Increment%=
  964. text(sizeW%,3):$Increment%="25"
  965. =csvW%=
  966. new_window("csvfile",sprites%):CSVTitle%=block%!72
  967. <fkeyW%=
  968. new_window("fkey",sprites%):FkeyTitle%=block%!72
  969. 7Kpadicon%=
  970. val(fkeyW%,0):Fkeyequiv%=
  971. text(fkeyW%,3)
  972. )prefsW%=
  973. new_window("prefs",sprites%)
  974. 7datesep%=
  975. text(prefsW%,1):timesep%=
  976. text(prefsW%,4)
  977. .wc%=
  978. text(prefsW%,7):ws%=
  979. text(prefsW%,10)
  980.  mergewith%=
  981. text(prefsW%,17)
  982. 8Interval%=
  983. text(prefsW%,25):Every%=
  984. text(prefsW%,32)
  985. 5StartHere%=
  986. text(prefsW%,45):
  987. shade(prefsW%,45,
  988. )queryW%=
  989. new_window("query",sprites%)
  990. &Query%=
  991. text(queryW%,0):$Query%=""
  992. 'helpW%=
  993. new_window("help",sprites%)
  994. +filterW%=
  995. new_window("filter",sprites%)
  996. +searchW%=
  997. new_window("search",sprites%)
  998.  'gridW%=
  999. new_window("grid",sprites%)
  1000. !CGridspace%=
  1001. text(gridW%,8):Gridsnap%=
  1002. text(gridW%,9):
  1003. grid_opts
  1004. "$informW%=
  1005. new_window("inform",0)
  1006. #'markW%=
  1007. new_window("mark",sprites%)
  1008. $TinputW%=
  1009. new_window("input",0):Prompt%=
  1010. text(inputW%,0):Params%=
  1011. text(inputW%,1)
  1012. %"titleW%=
  1013. new_window("title",0)
  1014. &(mergecomW%=
  1015. new_window("mergecom",1)
  1016.  "Wimp_CloseTemplate"
  1017. (Jwinbuff%()=csvW%,0,passW%,700,printerW%,1000,printW%,2300,prefsW%,3000
  1018. scroll_icons(rows%)
  1019.  I%=0 
  1020.  rows%
  1021.   iflags%=&0700F735
  1022. .Y  R%=
  1023. create_icon(0,scrollW%,4,-I%*44-52,64,48,iflags%,"",buff%,writenum%,4):buff%+=4
  1024.   iflags%=&0700F535
  1025. 0[  R%=
  1026. create_icon(0,scrollW%,66,-I%*44-52,212,48,iflags%,"",buff%,writep%,13):buff%+=13
  1027. 2#!block%=0:block%!4=-rows%*44-56
  1028. block%!8=284:block%!12=0
  1029.  "Wimp_SetExtent",scrollW%,block%
  1030. new_window(name$,sp%)
  1031.  handle%
  1032.  "Wimp_LoadTemplate",,block%,buff%,endbuff%,fontbuff%,name$,0 
  1033.  ,,buff%
  1034.  name$="main" 
  1035.  block%?35=winback%
  1036. block%!64=sp%
  1037.  "Wimp_CreateWindow",,block% 
  1038.  handle%
  1039. =handle%
  1040. show_windows
  1041. check_record
  1042. open_window(mainW%)
  1043.  present%=7 
  1044.  Tools%=1 
  1045.  ShowTools%=
  1046. open_window(keypadW%)
  1047.  Listed% 
  1048. open_window(listW%)
  1049. store_window(wi%,buff%)
  1050.  ic%,ptr%
  1051. I'!block%=wi%:block%!4=ic%:ptr%=buff%
  1052.  "Wimp_GetIconState",,block%
  1053.  ((block%!24) 
  1054.  (1<<23))=0
  1055.   !ptr%=block%!24:ptr%+=4
  1056.  ((block%?25) 
  1057.  1)>0 
  1058.  $ptr%=$
  1059. text(wi%,ic%):ptr%+=block%!36
  1060. N%  !block%=wi%:ic%+=1:block%!4=ic%
  1061.  "Wimp_GetIconState",,block%
  1062. restore_window(wi%,buff%)
  1063.  ic%,ptr%
  1064. U'!block%=wi%:block%!4=ic%:ptr%=buff%
  1065.  "Wimp_GetIconState",,block%
  1066.  ((block%!24) 
  1067.  (1<<23))=0
  1068. XI  !block%=wi%:block%!4=ic%:block%!8=!ptr%:block%!12=&ffffffff:ptr%+=4
  1069.  "Wimp_SetIconState",,block%
  1070.  ((block%?25) 
  1071.  1)>0 
  1072. text(wi%,ic%)=$ptr%:ptr%+=block%!36
  1073. [%  !block%=wi%:ic%+=1:block%!4=ic%
  1074.  "Wimp_GetIconState",,block%
  1075. open_window(wi%)
  1076. block%!0=wi%
  1077.  "Wimp_GetWindowState",,block%
  1078. block%!28=-1
  1079. open_it(wi%)
  1080. open_it(wi%)
  1081.  win%
  1082.  wi% 
  1083.  mainW%:
  1084.  ShowTools% 
  1085.  Tools%=2 
  1086. update_pane(keypadW%,-154,0,152,toolheight%,0,0)
  1087.  markpane% 
  1088. update_pane(markW%,0,block%!16-block%!8+2,696,62,0,0)
  1089.  Scrollnum%>0 
  1090.  design%=
  1091.  I%=0 
  1092.  Scrollnum%-1
  1093.       
  1094. update_pane(scrollerW%(I%),scrolldata%(I%,1)-block%!20+2,block%!24-scrolldata%(I%,2)-scrolldata%(I%,4)+2,scrolldata%(I%,3),scrolldata%(I%,4)-4,0,0)
  1095.  HasTitle%=1 
  1096. sK    
  1097. update_pane(titleW%,0,0,block%!12-block%!4,block%!16-block%!8,0,0)
  1098.  "Wimp_OpenWindow",,block%
  1099.  tabcreateW%:
  1100. update_pane(scrollW%,16,160,284,232,0,0)
  1101.  pselectW%:
  1102. update_pane(numscrollW%,8,50,740,196,0,0)
  1103.  matchW%:
  1104. update_pane(queryW%,340,8,466,174,0,0)
  1105.  changeW%:
  1106. update_pane(queryW%,18,202,466,174,0,0)
  1107.  moveW%:
  1108. update_pane(queryW%,18,312,466,138,0,0)
  1109.  savesubW%:
  1110. update_pane(queryW%,10,40,466,174,0,0):
  1111. redraw_icon(wi%,0):
  1112.  filterW%:
  1113. update_pane(queryW%,8,52,466,138,0,0)
  1114.  keypadW%:
  1115.  Tools%=1 
  1116. Q    !paneblock%=wi%:
  1117.  "Wimp_GetWindowState",,paneblock%:flags%=paneblock%!32
  1118.  flags% 
  1119.  (1<<19) 
  1120. ,      
  1121.  paneblock%!16-paneblock%!8>100 
  1122. 9        block%!4=paneblock%!4:block%!12=paneblock%!12
  1123. :        block%!16=paneblock%!16:block%!8=block%!16-100
  1124.         
  1125. 9        block%!4=paneblock%!4:block%!12=paneblock%!12
  1126. J        block%!16=paneblock%!16:block%!8=block%!16-padheight%         
  1127.       
  1128.         
  1129. $    
  1130.  "Wimp_OpenWindow",,block%
  1131.  "Wimp_OpenWindow",,block%
  1132.  win%=0 
  1133.  winbuff%(win%,0)=wi% 
  1134. store_window(wi%,remember%+winbuff%(win%,1))
  1135.  win%
  1136. close_it(wi%)
  1137.  wi% 
  1138.  mainW%:
  1139.  altered% 
  1140. save_everything
  1141. kill_scrollers(
  1142. hide_windows:stop%=
  1143.  HasTitle%>0 
  1144. close_window(titleW%)
  1145.  matchW%:matching%=
  1146. close_window(queryW%)
  1147.  keyW%:design%=
  1148. :newtree%=
  1149.  tabcreateW%:
  1150. close_window(scrollW%)
  1151.  pselectW%:
  1152. close_window(numscrollW%)
  1153.  changeW%,moveW%,savesubW%,filterW%:
  1154. close_window(queryW%)
  1155. close_window(wi%)
  1156.  T%=0 
  1157.  LastTable%
  1158.  wi%=tableW%(T%) 
  1159. restore_caret(returnto%)
  1160. hide_windows
  1161. close_window(queryW%)
  1162. close_window(keypadW%)
  1163.  I%=0 
  1164.  LastTable%
  1165.  tableW%(I%)>0 
  1166. close_window(tableW%(I%))
  1167. close_window(miscW%)
  1168. close_window(listW%)
  1169. close_window(matchW%)
  1170. close_window(relateW%)
  1171. close_window(keyW%)
  1172. close_window(reformW%)
  1173. close_window(calcW%)
  1174. close_window(mergeW%)
  1175. close_window(csvW%)
  1176. close_window(passW%)
  1177. close_window(aclW%)
  1178. close_window(tabcreateW%)
  1179. close_window(prefsW%)
  1180. close_window(printW%)
  1181. close_window(printerW%)
  1182. close_window(linkW%)
  1183. close_window(changeW%)
  1184. close_window(savesubW%)
  1185. close_window(moveW%)
  1186. close_window(searchW%)
  1187. close_window(filterW%)
  1188. close_window(helpW%)
  1189. close_window(createW%)
  1190. close_window(mainW%)
  1191. close_window(informW%)
  1192. close_window(markW%)
  1193. close_window(colW%)
  1194. close_window(inputW%)
  1195. close_window(wi%)
  1196. !block%=wi%
  1197.  "Wimp_CloseWindow",,block%
  1198. shut_window(wi%)
  1199.  "Wimp_TransferBlock",mytask%,block%,mytask%,paneblock%,88
  1200.  wi%=filterW% 
  1201. filter_click(filterW%,1,4) 
  1202. close_it(wi%)
  1203.  "Wimp_TransferBlock",mytask%,paneblock%,mytask%,block%,88
  1204. redraw(handle%)
  1205.  x0%,y0%,more%
  1206. !block%=handle%
  1207.  "Wimp_RedrawWindow",,block% 
  1208.  more%
  1209. 2x0%=block%!4-block%!20:y0%=block%!16-block%!24
  1210.  more%
  1211. draw(x0%,y0%)
  1212.  "Wimp_GetRectangle",,block% 
  1213.  more%
  1214. draw(x0%,y0%)
  1215.  TextPtr%,x1%,x2%,y1%,y2%,X%,Y%,line%,chars%,colour%,YS%,YL%,L%,b%,t%
  1216.  handle% 
  1217.  titleW%:
  1218. title(SHtitleptr%,block%!4,block%!8,block%!12-block%!4,block%!16-block%!8)
  1219.  mainW%:
  1220.  design% 
  1221.  showgrid% 
  1222.     int%=
  1223. ($Gridspace%)
  1224. $    
  1225.  "Wimp_SetColour",gridcol%
  1226. #    
  1227.  X%=x0% 
  1228.  block%!12 
  1229.  int%
  1230.       
  1231.  X%,block%!8
  1232.       
  1233.  plot%,X%,block%!16
  1234. #    
  1235.  Y%=y0% 
  1236.  block%!8 
  1237.  -int%
  1238.       
  1239.  block%!4,Y%
  1240.       
  1241.  plot%,block%!12,Y%
  1242.  listW%:
  1243.  "Wimp_SetColour",7
  1244.   x1%=block%!28-x0%
  1245.   x2%=block%!36-x0%
  1246.   chars%=(x2%-x1%) 
  1247.  16+2
  1248.   y1%=-(block%!40-y0%)
  1249.   y2%=-(block%!32-y0%)
  1250.   x1%=x1% 
  1251.   y1%=y1% 
  1252.  36+1
  1253.   y2%=y2% 
  1254.  36+2
  1255.   SHtextptr%=!textanchor%
  1256. 0  TextPtr%=(SHtextptr%)+(y1%-1)*LenLine%+x1%
  1257. #  RecPtr%=(SHrecptr%)+(y1%-1)*4
  1258.  y2%>Count% 
  1259.  y2%=Count%
  1260.  line%=y1% 
  1261.  !RecPtr% 
  1262. (      
  1263.  -1,-2:colour%=headerwimpcol%
  1264. #      
  1265.  -3:colour%=rulewimpcol%
  1266.        
  1267. :colour%=bodywimpcol%
  1268.         
  1269. #    
  1270.  "Wimp_SetColour",colour%
  1271.  !RecPtr%=-3 
  1272. Q      
  1273.  x0%+Lmargin%*16,y0%-(line%-1)*36-18:
  1274.  BY (LenLine%-Lmargin%-2)*16+8,0
  1275.       
  1276. draw_line
  1277.         
  1278.     %    TextPtr%+=LenLine%:RecPtr%+=4
  1279.  line%
  1280.  vrules% 
  1281. (    
  1282.  "Wimp_SetColour",rulewimpcol%
  1283. G    YS%=block%!8:b%=Count%*36-y0%+block%!8-fspace%:
  1284.  b%<0 
  1285.  YS%-=b%
  1286. ;    YF%=block%!16:t%=hspace%+block%!24:
  1287.  t%>0 
  1288.  YF%-=t%
  1289.     L%=
  1290. (spacer$)*8
  1291.     column%=2
  1292.      
  1293.  column%<=PrintFields%
  1294. $      X%=x0%+Tab%(column%)*16-L%
  1295. "      
  1296.  X%,YS%:
  1297.  vplot%,X%,YF%
  1298.       column%+=1 
  1299.         
  1300. draw_line
  1301.  x0%+x1%*16,y0%-(line%-1)*36-4
  1302.  "OS_WriteN",TextPtr%,chars%
  1303. update_pane(wi%,x%,y%,w%,h%,xs%,ys%)
  1304. newquery%=!block%
  1305.  wi%=queryW% 
  1306.  newquery%<>oldquery% 
  1307. shut_window(oldquery%):oldquery%=newquery%
  1308. "8!paneblock%=wi%:
  1309.  "Wimp_GetWindowState",,paneblock%
  1310. paneblock%!4=block%!4+x%
  1311. $!paneblock%!12=paneblock%!4+w%
  1312. paneblock%!16=block%!16-y%
  1313. &!paneblock%!8=paneblock%!16-h%
  1314. ''paneblock%!20=xs%:paneblock%!24=ys%
  1315. ()paneblock%!28=block%!28:block%!28=wi%
  1316.  "Wimp_OpenWindow",,paneblock%
  1317.  "Wimp_OpenWindow",,block%
  1318.  up_pend% 
  1319.  up_pend%=
  1320.  "Wimp_GetWindowState",,block%
  1321.  (block%!32 
  1322.  (1<<18)) 
  1323.  up_pend%=
  1324. update_pane(wi%,x%,y%,w%,h%,xs%,ys%)
  1325.  wi%=titleW% 
  1326. close_window(wi%):
  1327. open_window(wi%)
  1328.  Menu handling -------------------------------------------------------
  1329. make_menus
  1330. fieldM%=
  1331. create_menu(menu_ptr%,"Field,Create index... ^J,#14,Global changes... ^G,Link to table... ^L,Combine fields...,Start editing ^S,Remove object   ,#14!saveW%,Save as CSV!saveW%,Undo changes,Compact sequence")
  1332. 68SaveOb%=
  1333. menu_text(fieldM%,7):$SaveOb%="Save object"
  1334. 7fAnalyseFunc%=
  1335. menu_text(fieldM%,1):CalcFunc%=
  1336. menu_text(fieldM%,4):RemoveOb%=
  1337. menu_text(fieldM%,6)
  1338. 8`validateM%=
  1339. create_menu(menu_ptr%,"Validation,Create table...,~Display table,Show files ^Q")
  1340. 9fsubfilenameM%=
  1341. create_menu(menu_ptr%,"Subfile name:,^20"):Subfilename%=
  1342. menu_text(subfilenameM%,0)
  1343. :jrenameM%=
  1344. create_menu(menu_ptr%,"New name:,^255"):NewName%=
  1345. menu_text(renameM%,0):$NewName%="!NewName"
  1346. miscM%=
  1347. create_menu(menu_ptr%,"Miscellaneous,Move/delete...,Set passwords...,Field colours...,Edit template ^E,Name subfile>subfilenameM%,Rename database>renameM%")
  1348. <hdelimiterM%=
  1349. create_menu(menu_ptr%,"Separator,Comma,TAB,CR,_LF,^2"):Delim%=
  1350. menu_text(delimiterM%,4)
  1351. =zterminatorM%=
  1352. create_menu(menu_ptr%,"Terminator,CR,LF,LF CR,CR LF,CR CR,_LF LF,^2"):Termin%=
  1353. menu_text(terminatorM%,6)
  1354. >~scrolltermM%=
  1355. create_menu(menu_ptr%,"Scroll terminator,Semicolon,Comma,TAB,_Space,^1"):Scrterm%=
  1356. menu_text(scrolltermM%,4)
  1357. string$="Print,Create report... Print,Show resources ^R,Show jobs done ^P,Options... ^Print,Save query!saveW%,~Numeric fields... ^N,Extra calculations... ^
  1358. N,~Save selection!saveW%,~Clear selection ^Z,~Display selection!,Select all ^A"
  1359. @+printM%=
  1360. create_menu(menu_ptr%,string$)
  1361. AEcsvM%=
  1362. create_menu(menu_ptr%,"CSV files,Export... ^X,Options...")
  1363. BSindexM%=
  1364. create_menu(menu_ptr%,"Index,Show details... ^K,Delete,Show files ^I")
  1365. string$="Powerbase,_Information...,*Field:1234567>fieldM%,Print>printM%,Validation!validateM%,Index!indexM%,Miscellaneous>miscM%,Show keypad Tab,~Export selected!saveW%,Export subset...,Copy as!saveW%,CSV files>csvM%,_Undo changes,Help"
  1366. DImainM%=
  1367. create_menu(menu_ptr%,string$):Fieldpos%=
  1368. menu_text(mainM%,1)
  1369. indextreeM%=
  1370. create_menu(menu_ptr%,"Print index,All subfiles,Current subfile,Symmetrical,_Root first,Totals only,Complete")
  1371. tick(indextreeM%,1,
  1372. tick(indextreeM%,2,
  1373. utilityM%=
  1374. create_menu(menu_ptr%,"Utilities,~New primary key...,~Adjust format...,~New record format...,~Merge databases...,~Change length>sizeW%,~Balance index ^B,~Print index>indextreeM%,~Print field data,~Find duplicates,~Merge commands...")
  1375. HAUtil1%=
  1376. menu_text(utilityM%,1):Util2%=
  1377. menu_text(utilityM%,2)
  1378. iconbarM%=
  1379. create_menu(menu_ptr%,"\Powerbase,_Information>infoW%,New database!saveW%,*Utilities>utilityM%,~Close database,~Rename database>renameM%,Preferences...,_Help,Quit")
  1380. designM%=
  1381. create_menu(menu_ptr%,"New database,Create field...,Fields created,_Default database,Save form file!saveW%,Database size>sizeW%,_Primary key...,Grid>gridW%,Quit design"):DesAction%=
  1382. menu_text(designM%,0)
  1383. tableM%=
  1384. create_menu(menu_ptr%,"Table,Clear,Modify,Print,#15,Undo change,_Undo all,Save!saveW%,Save as CSV!saveW%"):SortTabCol%=
  1385. menu_text(tableM%,3):$SortTabCol%="Sort"
  1386. LHdirectionM%=
  1387. create_menu(menu_ptr%,"Direction,Ascending,Descending")
  1388. listM%=
  1389. create_menu(menu_ptr%,"Report,Save as text!saveW%,Sort   """">directionM%,Shrink list,Discard"):SortTextCol%=
  1390. menu_text(listM%,1)
  1391. NakeystrokeM%=
  1392. create_menu(menu_ptr%,"Keystroke,Assign>fkeyW%,Defaults,Save choices,List keys")
  1393. OBmarkM%=
  1394. create_menu(menu_ptr%,"Marked record,Include,Exclude")
  1395. P`columnM%=
  1396. create_menu(menu_ptr%,"Column no.,^2"):Expcol%=
  1397. menu_text(columnM%,0):$Expcol%="1"
  1398. QzmergecomM%=
  1399. create_menu(menu_ptr%,"Merge command,GetField,GetExpanded>columnM%,NextMatch"):
  1400. tick_one(mergecomM%,0,2,0)
  1401.  --------------- Read validation strings etc -----------------------
  1402. Srfmenu$()="Editable","Computed","Check-box","External","Keypad button","Extra button","Stamp","Scrollable list"
  1403.  I%=0 
  1404.  L% 30:flist%(I%)=L%:?L%=0
  1405. W)f$="<Pbase$Dir>.Resources.ValStrings"
  1406. vstrings%=100
  1407.  vname$(vstrings%),vtype$(vstrings%),valid%(vstrings%),rvalid%(vstrings%),hvalid%(vstrings%)
  1408.   valid$=
  1409.   C%=
  1410. (valid$)
  1411.  C%>=0 
  1412. _G    P%=
  1413. valid$,":"):vname$(C%)=
  1414. valid$,4,P%-4):valid$=
  1415. valid$,P%+1)
  1416.     vtype$(C%)=
  1417. valid$,1)
  1418.  vtype$(C%)="K" 
  1419. bG      !block%=keypadW%:block%!4=C%-9:
  1420.  "Wimp_GetIconState",,block%
  1421.       valid$=$block%!32
  1422.       
  1423.  valid$=
  1424. valid$,3)
  1425. e        
  1426. f1    
  1427. (valid$)+1:$V%=valid$:valid%(C%)=V%
  1428. g2    
  1429. (valid$)+1:$V%=valid$:rvalid%(C%)=V%
  1430. h5    
  1431. (valid$)+16:$V%=valid$:P%=
  1432. $V%,"Pptr_")
  1433. iK    
  1434.  P%>0 
  1435.  $(V%+P%-1)="Pptr_hand,4,0" 
  1436.  $(V%+
  1437. ($V%))=";Pptr_hand,4,0"
  1438.     hvalid%(C%)=V%  
  1439.  vtype$(C%) 
  1440. lS      
  1441.  "E":fmenu$(0)+=","+vname$(C%):L%=flist%(0):N%=?L%:N%+=1:?L%=N%:L%?N%=C%
  1442. mS      
  1443.  "C":fmenu$(1)+=","+vname$(C%):L%=flist%(1):N%=?L%:N%+=1:?L%=N%:L%?N%=C%
  1444. nS      
  1445.  "T":fmenu$(2)+=","+vname$(C%):L%=flist%(2):N%=?L%:N%+=1:?L%=N%:L%?N%=C%
  1446. oS      
  1447.  "X":fmenu$(3)+=","+vname$(C%):L%=flist%(3):N%=?L%:N%+=1:?L%=N%:L%?N%=C%
  1448. pS      
  1449.  "K":fmenu$(4)+=","+vname$(C%):L%=flist%(4):N%=?L%:N%+=1:?L%=N%:L%?N%=C%
  1450. qS      
  1451.  "O":fmenu$(5)+=","+vname$(C%):L%=flist%(5):N%=?L%:N%+=1:?L%=N%:L%?N%=C%
  1452. rS      
  1453.  "S":fmenu$(6)+=","+vname$(C%):L%=flist%(6):N%=?L%:N%+=1:?L%=N%:L%?N%=C%
  1454. sS      
  1455.  "L":fmenu$(7)+=","+vname$(C%):L%=flist%(7):N%=?L%:N%+=1:?L%=N%:L%?N%=C%
  1456. t        
  1457. close_file(F)
  1458.  I%=0 
  1459. yIftypeM%(I%)=
  1460. create_menu(menu_ptr%,fmenu$(I%)):
  1461. tick(ftypeM%(I%),0,
  1462. ybar%=144+8*44
  1463. |.Dynamicmenus%=menu_ptr%:men_top%=menu_ptr%
  1464. clear_dynamic_menus
  1465. fieldsM%=0
  1466. valtablesM%=0
  1467. userM%=0
  1468. indicesM%=0
  1469. menubuff%=menuindir%
  1470. =Dynamicmenus%
  1471. field_menu(
  1472.  items%,selec%)
  1473.  F%,P%,L%,D$,F$,icptr%,textpointer%,flags%
  1474. items%=-1
  1475. Aicptr%=
  1476. clear_dynamic_menus:textpointer%=icptr%+fields%*24+28
  1477. &men_top%=textpointer%+(fields%*17)
  1478.  men_top%>men_end% 
  1479.  fatal_err%,"Insufficent room for field menu. Increase menumem% by at least &"+
  1480. ~(men_top%-men_end%)+" bytes"
  1481.  textpointer%>menu_ptr% 
  1482.  menu_ptr%=textpointer%
  1483.  selec%=2 
  1484.  $icptr%="Print order" 
  1485.  $icptr%="Field list"
  1486. Zicptr%?12=7:icptr%?13=2:icptr%?14=7:icptr%?15=0:icptr%!16=270:icptr%!20=44:icptr%!24=0
  1487. icptr%+=28
  1488.  selec% 
  1489.  Include all fields
  1490.  F%=1 
  1491.  fields%
  1492. fieldmenu_item(F%)
  1493.  Queriable fields only
  1494.  F%=1 
  1495.  fields%
  1496.     V%=chartype%(F%):inc%=
  1497.  vtype$(V%) 
  1498.       
  1499.  "K","O":
  1500.  Exclude
  1501. (      
  1502.  "S":inc%=(V%<>59):
  1503.  Not Logo
  1504.       
  1505.  "C","T","L":inc%=
  1506. H      
  1507.  "X":inc%=(V%=36 
  1508.  V%=39 
  1509.  V%=60):
  1510.  Text, Text block & Remote
  1511. 5      
  1512.  "E":inc%=(len%(F%)>0):
  1513.  Not simple labels
  1514.         
  1515. $    
  1516.  inc% 
  1517. fieldmenu_item(F%)
  1518.  Include only highlighted fields
  1519.  I%=1 
  1520. (printorder$)-1 
  1521. $    F%=
  1522. fnum(
  1523. printorder$,I%,2))
  1524. fieldmenu_item(F%)
  1525.  Indexable fields only
  1526.  F%=1 
  1527.  fields%
  1528.     V%=chartype%(F%):inc%=
  1529.  vtype$(V%) 
  1530. (      
  1531.  "S":inc%=(V%<>59):
  1532.  Not Logo
  1533. K      
  1534.  "C":inc%=(V%=6 
  1535.  V%=7):
  1536.  No point indexing auto-updating fields
  1537. 5      
  1538.  "X":inc%=(V%=60):
  1539.  Remote only (pathname)
  1540. 5      
  1541.  "E":inc%=(len%(F%)>0):
  1542.  Not simple labels
  1543.         
  1544. $    
  1545.  inc% 
  1546. fieldmenu_item(F%)
  1547.  F%        
  1548. icptr%!-24=icptr%!-24 
  1549. =Dynamicmenus%
  1550. fieldmenu_item(F%)
  1551. get_icon_cols(mainW%,field%(F%))<>winback%*17 
  1552.   F$=
  1553. "  "+
  1554. (F%)+" ",4)
  1555. 7    
  1556.  F%>MaxFields%+2:F$+=Tag$(F%):flags%=&0B000121
  1557. <    
  1558.  F%=0 
  1559.  F%>MaxFields%:F$+=Tag$(F%):flags%=&08000121
  1560. N    
  1561. text(mainW%,desc%(F%))="":F$+="<Blank> "+Tag$(F%):flags%=&07000121
  1562. 5    D$=
  1563. text(mainW%,desc%(F%)),7)+"       ",8)
  1564. (    F$+=D$+Tag$(F%):flags%=&07000121
  1565.   L%=
  1566. ^  !icptr%=0:icptr%!4=-1:icptr%!8=flags%:icptr%!12=textpointer%:icptr%!16=-1:icptr%!20=L%+1
  1567. )  $textpointer%=F$:textpointer%+=L%+1
  1568.   icptr%+=24
  1569.   items%+=1
  1570. menu_text(menu%,item%)
  1571. ic%=menu%+28+item%*24
  1572.  ((ic%!8) 
  1573.  &100)=0 
  1574. =ic%+12 
  1575. =ic%!12
  1576. create_menu(
  1577.  menu%,list$)
  1578.  start%,choice$,title$,entries%,item%,P%,Q%,S%,shaded%,width%,L%,LL%,set8%,M$
  1579. start%=menu%
  1580. list$,1)="\" 
  1581.  leftmenu%=
  1582.  list$=
  1583. list$,2)
  1584. list$,",")
  1585. $title$=
  1586. list$,P%-1):L%=
  1587. (title$)
  1588.  L%>12 
  1589. J  !menu%=buff%:$buff%=title$:buff%+=L%+1:menu%!4=-1:menu%!8=L%:set8%=
  1590.  $menu%=title$
  1591. width%=L%:M$=title$
  1592. menu%?12=7:menu%?13=2
  1593. menu%?14=7:menu%?15=0
  1594. *menu%!16=width%:menu%!20=44:menu%!24=0
  1595. item%=menu%+28
  1596. list$+=","
  1597. entries%=0
  1598.   LL%=0
  1599.   Q%=P%+1
  1600.   P%=
  1601. list$,",",Q%)
  1602.  P%>0 
  1603.     !item%=0:shaded%=0
  1604.      choice$=
  1605. list$,Q%,P%-Q%)
  1606.     S%=
  1607. choice$,"!")
  1608. 5    
  1609.  S%>0 
  1610.  ?item%=?item% 
  1611. choice$,S%,1)=">"
  1612.     S%=
  1613. choice$,">")
  1614.  S%=0 
  1615.       item%!4=-1
  1616.       
  1617.       S$=
  1618. choice$,S%+1)
  1619. .      
  1620.  S$<>"" 
  1621.  item%!4=
  1622. (S$) 
  1623.  item%!4=1
  1624.        choice$=
  1625. choice$,S%-1)
  1626.         
  1627. choice$,1) 
  1628. 3      
  1629.  "~":choice$=
  1630. choice$,2):shaded%=(1<<22)
  1631. 5      
  1632.  "_":choice$=
  1633. choice$,2):?item%=?item% 
  1634. F      
  1635.  "*":choice$=
  1636. choice$,2):?item%=?item% 
  1637.  16:shaded%=(1<<22)
  1638. -      
  1639.  "#":LL%=
  1640. choice$,2)):choice$=""
  1641. D      
  1642.  "^":LL%=
  1643. choice$,2)):choice$="":?item%=?item% 
  1644.  (1<<2)
  1645.         
  1646. C    
  1647.  set8% 
  1648.  !item%=!item% 
  1649.  (1<<8):set8%=
  1650.  Indirected title
  1651.     L%=
  1652. (choice$)+1
  1653. *    
  1654.  L%>width% 
  1655.  width%=L%:M$=choice$
  1656.  LL%>0 
  1657.  L%=LL%+1
  1658.  L%>13 
  1659.  LL%>0 
  1660. I      item%!12=buff%:$buff%=choice$:buff%+=L%:item%!16=-1:item%!20=L%
  1661.       item%!8=&7000121
  1662.       
  1663.       $(item%+12)=choice$
  1664.       item%!8=&7000021
  1665.         
  1666. !    item%!8=item%!8 
  1667.  shaded%
  1668.     item%+=24
  1669.     entries%+=1
  1670.  P%=0
  1671. item%!-24=item%!-24 
  1672. menu%=item%
  1673. start%!16=
  1674. string_width(M$)
  1675. =start%
  1676. tick(menu%,item%,on%)
  1677. item%=menu%+28+item%*24
  1678.  on% 
  1679. :?item%=?item% 
  1680. :?item%=?item% 
  1681. tick_one(menu%,first%,last%,item%)
  1682.  I%=first% 
  1683.  last%
  1684. tick(menu%,I%,(I%=item%))
  1685. ticked(menu%,item%)
  1686. item%=menu%+28+item%*24
  1687.  (?item% 
  1688. lit(menu%,item%,on%)
  1689. item%=menu%+28+item%*24
  1690.  on% 
  1691. : item%!8=item%!8 
  1692.  (1<<22)
  1693. : item%!8=item%!8 
  1694.  (1<<22)
  1695. lit(menu%,item%)
  1696. item%=menu%+28+item%*24
  1697.  (item%!8 
  1698.  (1<<22)) 
  1699. show_menu(menu%,x%,y%)
  1700. ,)menuhandle%=menu%:menux%=x%:menuy%=y%
  1701.  "Wimp_CreateMenu",,menuhandle%,x%,y%
  1702. show_pop_up_menu(menu%,wi%,ic%)
  1703.  x%,y%,vxmin%,vymax%,scrollx%,scrolly%
  1704. 20!block%=wi%:
  1705.  "Wimp_GetWindowState",,block%
  1706. 3Jvxmin%=block%!4:vymax%=block%!16:scrollx%=block%!20:scrolly%=block%!24
  1707. 4;!block%=wi%:block%!4=ic%:
  1708.  "Wimp_GetIconState",,block%
  1709. 5=x%=block%!16-scrollx%+vxmin%:y%=block%!20-scrolly%+vymax%
  1710. 6)menuhandle%=menu%:menux%=x%:menuy%=y%
  1711.  "Wimp_CreateMenu",,menu%,x%,y%
  1712. show_user_menu(buff%,field%,button%)
  1713.  I%,ptr%,blocksize%,menu$,F,items%,P%,m$,forbidden$,d%
  1714. whandle%=wi%:icon%=ic%
  1715. forbidden$=" $&%@\^:.#*|"
  1716. menufield%=
  1717. (Tag$(field%))
  1718.  menufield%=0 
  1719.  Tag$(field%)<>"" 
  1720.  menufield%+=1
  1721. B)    
  1722.  Tag$(menufield%)=Tag$(field%)  
  1723.  menufield%=field%-1
  1724. m$=Tag$(menufield%)
  1725.  I%=1 
  1726.   P%=
  1727. forbidden$,
  1728. m$,I%,1))
  1729.  P%>0 
  1730. m$,I%,1)="_" 
  1731. m$+="Menu"
  1732.  "OS_File",5,$database%+".Menus."+m$ 
  1733.  d%=0 
  1734.  "OS_File",5,$database%+"."+m$ 
  1735.  d%=1 
  1736. P*    
  1737.  "OS_File",8,$database%+".Menus"
  1738. QK    
  1739.  "OS_CLI","Rename "+$database%+"."+m$+" "+$database%+".Menus."+m$
  1740. ($database%+".Menus."+m$)
  1741.  F=0 
  1742. softerror(m$+","+$database%,152):
  1743. #F>255 
  1744. close_file(F):
  1745. softerror(m$,151):
  1746. title$=
  1747.  title$="UserMenu" 
  1748.  button%=1 
  1749. close_file(F):
  1750.  "OS_CLI","Filer_Run "+$database%+".Menus."+m$:
  1751. menu$=title$+","
  1752.   choice$=
  1753.   menu$+=choice$+","
  1754. close_file(F)
  1755. menu$=
  1756. menu$)
  1757.   P%=
  1758. menu$,",",P%+1)
  1759.  P%>0 
  1760.  items%+=1
  1761.  P%=0
  1762. blocksize%=items%*24+28
  1763. e"menu_ptr%=
  1764. clear_dynamic_menus
  1765. f(userM%=
  1766. create_menu(menu_ptr%,menu$)
  1767. show_pop_up_menu(userM%,mainW%,field%(field%))
  1768.  Icon handling -------------------------------------------------------
  1769. create_icon(left%,whandle%,xmin%,ymin%,width%,height%,iconflags%,text$,d1%,d2%,d3%)
  1770.  handle%
  1771. block%!0=whandle%
  1772. o!block%!4=xmin%:block%!8=ymin%
  1773. p2block%!12=xmin%+width%:block%!16=ymin%+height%
  1774. block%!20=iconflags%
  1775.  d1%=0 
  1776.   $(block%+24)=text$
  1777.   block%!24=d1%
  1778.   block%!28=d2%
  1779.   block%!32=d3%
  1780.  "Wimp_CreateIcon",left%,block% 
  1781.  handle%
  1782. =handle%
  1783. string_width(S$)
  1784.  Desktopfont%=0 
  1785.   W%=
  1786. (S$)*16+8
  1787.  "Wimp_TextOp",1,S$,0 
  1788.   W%+=16
  1789. guess_width(chars%,type%,width%)
  1790.  dontalter%
  1791.  chars%=0 
  1792.  type% 
  1793.  2:S$=
  1794. chars%,"M")
  1795.  4:S$="N"
  1796.  chars% 
  1797. 1    
  1798.  8:S$="88"+$datesep%+"88"+$datesep%+"88"
  1799. 4    
  1800.  10:S$="88"+$datesep%+"88"+$datesep%+"8888"
  1801. chars%,"8")
  1802.  3,6,46,47,54,56,57,74,75,77,78,79:S$=
  1803. chars%,"8")
  1804.  8,48,68:S$="88"+$timesep%+"88"+$timesep%+"88"
  1805.  49,69:S$="Wed,09 Aug,1998"
  1806.  50,70:S$="88"+$datesep%+"88"+$datesep%+"88"
  1807.  51,71:S$="88"+$datesep%+"88"+$datesep%+"8888"
  1808.  52,58,72:S$="Wed,09 Aug 1998.88:88:88"
  1809.  53,55,73,76:S$="Wed"
  1810.  0,1,7,63,64,65,66,67:S$=
  1811. chars%,"a")
  1812. :dontalter%=
  1813.  dontalter% 
  1814.  Desktopfont%=0 
  1815.     width%=chars%*16+16 
  1816. "    
  1817.  width%=
  1818. string_width(S$)
  1819.  type% 
  1820. "      
  1821.  64,65,66,67:width%+=42
  1822.         
  1823. =width%
  1824. redraw_icon(wi%,ic%)
  1825. !block%=wi%:block%!4=ic%
  1826. block%!8=0:block%!12=0
  1827.  "Wimp_SetIconState",,block%
  1828. *block%!8=0:block%!12=wi%:block%!16=ic%
  1829. shade(wi%,ic%,on%)
  1830. icon_bit(22,wi%,ic%,on%)
  1831. icon_bit(bit%,wi%,ic%,on%)
  1832. !block%=wi%
  1833. block%!4=ic%
  1834.  on% 
  1835. :block%!8=0:block%!12=1<<bit%
  1836. :block%!8=1<<bit%:block%!12=1<<bit%
  1837.  "Wimp_SetIconState",,block%
  1838. select(wi%,ic%)
  1839. !block%=wi%:block%!4=ic%
  1840. "block%!8=1<<21:block%!12=1<<21
  1841.  "Wimp_SetIconState",,block%
  1842. deselect(wi%,ic%)
  1843. !block%=wi%:block%!4=ic%
  1844.  block%!8=0:block%!12=(1<<21)
  1845.  "Wimp_SetIconState",,block%
  1846. invert(wi%,ic%)
  1847. !block%=wi%:block%!4=ic%
  1848.  block%!8=(1<<21):block%!12=0
  1849.  "Wimp_SetIconState",,block%
  1850. set_icon(wi%,ic%,on%)
  1851.  on% 
  1852. select(wi%,ic%) 
  1853. deselect(wi%,ic%)
  1854. selected(wi%,ic%)
  1855. !block%=wi%:block%!4=ic%
  1856.  "Wimp_GetIconState",,block%
  1857. =((block%!24) 
  1858.  (1<<21))>0
  1859. shaded(wi%,ic%)
  1860. !block%=wi%:block%!4=ic%
  1861.  "Wimp_GetIconState",,block%
  1862. =((block%!24) 
  1863.  (1<<22))>0
  1864. selected_esg(wi%,esg%)
  1865.  "Wimp_WhichIcon",wi%,block%,&003F0000,&00200000+(esg%<<16)
  1866. =!block%
  1867. next_writable(wi%,ic%,d%,r%,wi2%,ic2%)
  1868.  P%,E%,next%
  1869.  "Wimp_WhichIcon",wi%,block%,&00C0E000,(14<<12)
  1870.   E%+=4
  1871.  block%!E%=-1
  1872.  block%!P%<>ic% 
  1873.  P%<E%
  1874.   P%+=4
  1875.  P%=E% 
  1876.  P%-=4
  1877.  r%=1 
  1878.  P%+4=E% 
  1879.  wi2%=0 
  1880.  r%=1 
  1881.  P%+4=E% 
  1882.  wi%=wi2%:next%=ic2%
  1883.  0:P%=E%
  1884.  2:P%=-4
  1885. :P%+=4*d%
  1886.  wi2%>0 
  1887.  wi%=wi2%:next%=ic2% 
  1888.  next%=!block%
  1889.  wi2%>0 
  1890.  wi%=wi2%:next%=ic2% 
  1891.  next%=block%!(E%-4)
  1892. :next%=block%!P%
  1893. set_caret(0,wi%,next%)
  1894. text(wi%,ic%)
  1895. !block%=wi%:block%!4=ic%
  1896.  "Wimp_GetIconState",,block%
  1897. =block%!28
  1898. val(wi%,ic%)
  1899. !block%=wi%:block%!4=ic%
  1900.  "Wimp_GetIconState",,block%
  1901. =block%!32
  1902. text_length(wi%,ic%)
  1903. !block%=wi%:block%!4=ic%
  1904.  "Wimp_GetIconState",,block%
  1905. ($(block%!28))
  1906. buffer_length(wi%,ic%)
  1907. !block%=wi%:block%!4=ic%
  1908.  "Wimp_GetIconState",,block%
  1909. =block%!36-1
  1910. set_caret(pos%,wi%,ic%)
  1911. 0!block%=wi%:
  1912.  "Wimp_GetWindowState",,block%
  1913.  ((block%?34) 
  1914.  1)=1 
  1915.  ic%=-1 
  1916. *    
  1917.  "Wimp_SetCaretPosition",wi%,ic%
  1918.         
  1919. -    
  1920.  pos%=0 
  1921.  pos%=
  1922. text_length(wi%,ic%)
  1923. 6    
  1924.  "Wimp_SetCaretPosition",wi%,ic%,0,0,-1,pos%
  1925. limit_actions(off%,multi%)
  1926.  multi% 
  1927.  12,14,15,16,17,19,20,21,-1
  1928. shade(keypadW%,ic%,off%)
  1929.  buttonfield%(0,ic%)>0 
  1930. shade(mainW%,field%(buttonfield%(0,ic%)),off%)
  1931.  ic%=-1
  1932. lit(fieldM%,0,off%)
  1933. lit(fieldM%,2,off%)
  1934. identify_field(ic%)
  1935. ).Fieldnumber%=0:Fieldname$="":TextLength%=0
  1936.  (ic% 
  1937.  2)=1 
  1938. +!  !block%=mainW%:block%!4=ic%
  1939.  "Wimp_GetIconState",,block%
  1940.   TextLength%=block%!36-1
  1941.   Fieldnumber%=(ic%+1) 
  1942. /3  Fieldname$=$
  1943. text(mainW%,desc%(Fieldnumber%))
  1944.  Fieldname$="" 
  1945.  Fieldname$=Tag$(Fieldnumber%)
  1946. selected(prefsW%,21) 
  1947. 2$    
  1948.  chartype%(Fieldnumber%) 
  1949. 3&      
  1950.  2,4:
  1951.  "OS_Byte",202,0,239
  1952. 4#      
  1953.  "OS_Byte",202,16,111
  1954. 5        
  1955.  "OS_Byte",118
  1956. first_writable
  1957.  I%+=1
  1958.  (vtype$(chartype%(I%))="E" 
  1959.  len%(I%)>0) 
  1960.  I%>fields%
  1961.  I%>fields% 
  1962.  design%=
  1963.  fatal_err%,
  1964. msg("Err150") 
  1965. last_writable
  1966.  I%,V%,V$
  1967. I%=fields%+1
  1968. E9  I%-=1:V%=chartype%(I%):V$=vtype$(V%):ic%=field%(F%)
  1969.  I%=1 
  1970.  ((V$="E" 
  1971.  len%(I%)>0) 
  1972.  V$="L")
  1973.  V$<>"E" 
  1974.  V$<>"L" 
  1975.  I%=0
  1976.  Mouse_click processing ----------------------------------------------
  1977. mouse(x%,y%,b%,wi%,ic%)
  1978.  T%,S%,window%,icon%
  1979. OLE%=0:cell$=""
  1980. oldx%=x%:oldy%=y%
  1981. PCblock%!0=x%:block%!4=y%:block%!8=b%:block%!12=wi%:block%!16=ic%
  1982.  T%=0 
  1983.  LastTable%
  1984.  wi%=tableW%(T%) 
  1985.  Tablenumber%=T%
  1986. T!Scroller%=
  1987. scroller_num2(wi%)
  1988.  "Wimp_GetCaretPosition",,block%
  1989. V"window%=!block%:icon%=block%!4
  1990.  window% 
  1991.  mainW%,scrollerW%(Scroller%),queryW%,helpW%,changeW%,moveW%:oldwindow%=window%:oldicon%=icon%
  1992.  window%<>tableW%(Tablenumber%) 
  1993.  oldwindow%=0:oldicon%=0
  1994.  wi% 
  1995. iconbar_click
  1996.  infoW%:
  1997. info_click(ic%,b%)
  1998.  accessW%:accessbutton%=ic%
  1999.  aclW%:
  2000.  mainW%:
  2001. main_click(wi%,ic%,b%)
  2002.  keypadW%:
  2003. keypad_click(wi%,ic%,b%)
  2004.  saveW%,savesubW%:
  2005. save_click(wi%,ic%,b%)
  2006.  keyW%:
  2007. key_click(wi%,ic%,b%)
  2008.  tabcreateW%:
  2009. tabcreate_click(wi%,ic%,b%)
  2010.  scrollW%:
  2011. scroll_click
  2012.  linkW%:
  2013. link_to_table(wi%,ic%,b%)
  2014.  passW%:
  2015. passwords(x%,wi%,ic%,b%)
  2016.  printW%:
  2017. print_click(wi%,printerW%,ic%,b%)
  2018.  printerW%:
  2019. printer_click(printW%,wi%,ic%,b%)
  2020.  matchW%:
  2021. match_click(wi%,ic%,b%)
  2022.  createW%:
  2023. create_click(wi%,ic%,b%,icon%)
  2024.  tableW%(Tablenumber%):
  2025. table_click(Tablenumber%)
  2026.  scrollerW%(Scroller%):
  2027. scroller_click(wi%,ic%,b%,Scroller%)
  2028.  changeW%:
  2029. change_click(wi%,ic%,b%)
  2030.  moveW%:
  2031. move_click(wi%,ic%,b%)
  2032.  listW%:
  2033. list_click(x%,y%,b%,wi%)
  2034.  colW%:
  2035. set_colours(wi%,ic%,b%)
  2036.  calcW%:
  2037. calc_formula(OldField%,wi%,ic%,b%,$CalcForm%)
  2038.  mergeW%:
  2039. merge_click(wi%,ic%)
  2040.  sizeW%:
  2041. size_click(wi%,ic%,b%)
  2042.  csvW%:
  2043. csv_click(wi%,ic%,b%)
  2044.  fkeyW%:
  2045. fkey_click(wi%,ic%,b%)
  2046.  prefsW%:
  2047. prefs_click(wi%,ic%,b%)
  2048.  queryW%:
  2049. query_click(wi%,ic%,b%)
  2050.  helpW%:
  2051. help_click(wi%,ic%,b%)
  2052.  reformW%:
  2053. reform_click(wi%,ic%,b%)
  2054.  mergebaseW%:
  2055. mergebase_click(wi%,ic%,b%)
  2056.  filterW%:
  2057. filter_click(wi%,ic%,b%)
  2058.  searchW%:
  2059. search_click(wi%,ic%,b%)
  2060.  gridW%:
  2061. grid_click(wi%,ic%,b%)
  2062.  relateW%:
  2063. val_help
  2064.  markW%:
  2065. mark_click(wi%,ic%,b%)
  2066.  pselectW%:
  2067. close_it(wi%)
  2068.  extracalcW%:
  2069. extra_calcs(wi%,ic%,b%)
  2070.  inputW%:
  2071. input_click(wi%,ic%)
  2072.  miscW%:
  2073. misc_click(wi%,ic%)
  2074.  titleW%:HasTitle%=2:
  2075. close_window(wi%)
  2076.  mergecomW%:
  2077. mergecom_click(wi%,ic%,b%)
  2078.  bannerW%,numscrollW%:
  2079.  ### No action on this ###
  2080.  customise% 
  2081. (libfunc$+"_click(wi%,ic%)")
  2082.  wi%<>matchW% 
  2083.  wi%<>mainW% 
  2084. mergecom_click(wi%,ic%,b%)
  2085. "fieldsM%=
  2086. field_menu(items%,1)
  2087.  ic% 
  2088.  1,2:
  2089.  (b% 
  2090.  %111)=4 
  2091.  z%=1 
  2092.  (b% 
  2093.  %111)=1 
  2094.  z%=-1
  2095.  ic%=2 
  2096.  mergefield%+=z% 
  2097.  mergefield%-=z%
  2098.  mergefield%>fields% 
  2099.  mergefield%=1
  2100.  mergefield%<1 
  2101.  mergefield%=fields%
  2102. tick_one(fieldsM%,0,fields%-1,mergefield%-1)
  2103. show_pop_up_menu(fieldsM%,wi%,ic%)
  2104.   fieldfunc$="mergecom"
  2105. show_pop_up_menu(mergecomM%,wi%,ic%)
  2106. close_window(wi%)
  2107.  (b% 
  2108.  %11110000)>0 
  2109. ;    Start%=
  2110. text(wi%,5):End%=Start%+
  2111. text_length(wi%,5)
  2112. .    Filename$=Tag$(mergefield%):Type%=&fff
  2113. init_drag(wi%,ic%,5)
  2114. set_mergecom_icons
  2115. set_mergecom_icons
  2116.  shade%
  2117. text(mergecomW%,3)=Tag$(mergefield%)
  2118. redraw_icon(mergecomW%,3)
  2119. convert_to_DDF(mergefield%)
  2120. <shade%=
  2121.  (link$(mergefield%)="" 
  2122. ticked(mergecomM%,1))
  2123. shade(mergecomW%,5,shade%)
  2124. shade(mergecomW%,9,shade%)
  2125. convert_to_DDF(F%)
  2126. ticked(mergecomM%,0):S$="{merge "":Powerbase GetField "+Tag$(F%)+"""}"
  2127. ticked(mergecomM%,1):S$="{merge "":Powerbase GetExpanded "+Tag$(F%)
  2128. ($Expcol%)>1 
  2129.  S$+=","+$Expcol%
  2130.   S$+="""}"
  2131. ticked(mergecomM%,2):S$="{merge "":Powerbase NextMatch""}"
  2132. text(mergecomW%,5)=S$:
  2133. redraw_icon(mergecomW%,5)
  2134. misc_click(wi%,ic%)
  2135.  ic% 
  2136.  28,29,30,31,32,33:file%=ic%-28:
  2137. set_subfile(file%)
  2138.  filemem%(file%,key%)>=0 
  2139. 5    addr=filemem%(file%,key%):
  2140. display(key%,addr)
  2141. "    
  2142.  addr=
  2143. moveto(key%,top,1)
  2144.  "Wimp_StartTask","Resources:$.Apps.!Help"
  2145. print_init("W"):Lmargin%=1:LenLine%=40
  2146. end_line
  2147. store_string(
  2148. store_string("Database usage",1,
  2149. store_string(
  2150. pad("Subfile",20)+"Records   Updated",1,
  2151.  I%=0 
  2152. (    
  2153. store_string($Subfile%(I%),1,
  2154. 6    
  2155. store_string(
  2156. padL($
  2157. text(wi%,I%+22),6),22,
  2158. &    
  2159. store_string($Date%(I%),30,
  2160. store_string("Total records used",1,
  2161. store_string(
  2162. padL($used%,6),22,
  2163. store_string("Records available",1,
  2164. store_string(
  2165. padL($Records%,6),22,
  2166. store_string("Percentage used",1,
  2167. store_string(
  2168. padL($percent%,6),23,
  2169. .  $SaveName%=$database%+".PrintJobs.Stats"
  2170. /  $SaveSprite%="sfile_fff;Pptr_hand,4,0;R2"
  2171.   savefunc$="Save as text"
  2172. shade(saveW%,4,
  2173. deselect(saveW%,4)      
  2174. show_menu(saveW%,x%-64,y%+200)
  2175.   Listed%=
  2176. close_window(wi%)
  2177. input_click(wi%,ic%)
  2178.  ic% 
  2179.  $Params%<>"" 
  2180.  input%=
  2181.  3:cancel%=
  2182. info_click(ic%,b%)
  2183. b%=(b% 
  2184.  %111)
  2185.  ic% 
  2186. :    
  2187.  "XOS_ReadVarVal","Alias$URLOpen_HTTP",,-1 
  2188. @    
  2189.  E%=0 
  2190. softerror("web browser",198) 
  2191. internet(Web$)
  2192. <    
  2193.  "XOS_ReadVarVal","Alias$URLOpen_mailto",,-1 
  2194. D    
  2195.  E%=0 
  2196. softerror("email program",198) 
  2197. internet(Email$)
  2198. 9    
  2199.  "Wimp_StartTask","Resources:$.Apps.!Help"
  2200.  b%=4 
  2201.  "Wimp_CreateMenu",,-1
  2202. internet(url$)
  2203.  var$
  2204. url$,"@")>0:var$="Open_mailto"
  2205. url$,7)<>"mailto:" 
  2206.  url$="mailto:"+url$
  2207. url$,7)="http://":var$="Open_HTTP"
  2208. url$,3)="www":url$="http://"+url$:var$="Open_HTTP"
  2209. :url$="http://www."+url$:var$="Open_HTTP"
  2210. Run_It$="URL"+var$+" "+url$
  2211. -block%!0=256:block%!12=0:block%!16=&4AF80
  2212. (url$)<224 
  2213.   $(block%+20)=url$+
  2214. B  SHurlptr%=
  2215. extend_named_sliding_block(urlanchor%,SHclaim%)  
  2216. :  block%!20=0:block%!24=SHurlptr%:$SHurlptr%=url$+
  2217.  "Wimp_SendMessage",18,block%,0:my_ref%=block%!8
  2218. grid_click(wi%,ic%,b%)
  2219.  z%,space%,snap%,F
  2220. b%=(b% 
  2221.  %111)
  2222.  1,4:
  2223.  b%=4 
  2224.  z%=1 
  2225.  z%=-1
  2226.  ic% 
  2227. &    
  2228.  0:showgrid%=
  2229. selected(wi%,0)
  2230. (      
  2231.  4:gridcol%=(gridcol%+1) 
  2232. 4      
  2233.  1:gridcol%-=1:
  2234.  gridcol%<0 
  2235.  gridcol%=15
  2236.         
  2237. -    
  2238. set_icon_cols(wi%,ic%,7+gridcol%*16)
  2239.  3,4:
  2240.  !    
  2241. selected_esg(wi%,1) 
  2242.       
  2243.  3:plot%=5
  2244.       
  2245.  4:plot%=21
  2246. #        
  2247. $D    
  2248.  5:snapgrid%=
  2249. selected(wi%,5):
  2250. shade(createW%,49,snapgrid%)
  2251. %%    
  2252.  "Wimp_CreateMenu",,-1
  2253.  11,12:
  2254. '@    space%=
  2255. ($Gridspace%):space%+=(2*z%)*((ic%=11)-(ic%=12))
  2256. (>    
  2257.  space%>0 
  2258.  $Gridspace%=
  2259. (space%):
  2260. redraw_icon(wi%,8)
  2261.  13,14:
  2262. *=    snap%=
  2263. ($Gridsnap%):snap%+=(2*z%)*((ic%=13)-(ic%=14))
  2264. +;    
  2265.  snap%>0 
  2266.  $Gridsnap%=
  2267. (snap%):
  2268. redraw_icon(wi%,9)
  2269. --    F=
  2270. ("<Pbase$Dir>.Resources.GridOpts")
  2271. ..    
  2272. #F,showgrid%,snapgrid%,gridcol%,plot%
  2273. /"    
  2274. #F,$Gridspace%,$Gridsnap%
  2275. close_file(F)
  2276. grid_opts
  2277.  ic%>=0 
  2278. redraw(mainW%)
  2279. grid_opts
  2280.  F,d$
  2281. (-1) 
  2282.  d$="Initial" 
  2283.  d$="Resources"
  2284. ("<Pbase$Dir>."+d$+".GridOpts")
  2285. #F,showgrid%,snapgrid%,gridcol%,plot%
  2286. #F,$Gridspace%,$Gridsnap%
  2287. close_file(F)
  2288. set_icon(gridW%,0,showgrid%)
  2289. set_icon(gridW%,5,snapgrid%)
  2290. set_icon(gridW%,3,plot%=5)
  2291. set_icon(gridW%,4,plot%=21)
  2292. set_icon_cols(gridW%,2,7+gridcol%*16)
  2293. filter_click(wi%,ic%,b%)
  2294. b%=(b% 
  2295.  %111)
  2296.  ic% 
  2297. K'    
  2298.  $Query%<>"" 
  2299.  MarkedRecs%>0 
  2300. L9      $
  2301. text(wi%,5)="":
  2302. redraw_icon(wi%,5):matched%=0
  2303.       Filter$=
  2304. parse
  2305. N4      
  2306. check_record 
  2307.  addr=
  2308. moveto(key%,top,1)
  2309. O        
  2310. deselect(keypadW%,22)
  2311. RF    ic%=field%(buttonfield%(0,22)):
  2312.  ic%>0 
  2313. deselect(mainW%,ic%)
  2314. S,    
  2315. filter(keypadW%,4,
  2316. ):Filter$="TRUE"
  2317. T!    
  2318. restore_caret(returnto%)
  2319. U4    
  2320. close_it(wi%):
  2321. restore_caret(returnto%)
  2322. W3    
  2323. deselect(matchW%,
  2324. selected_esg(matchW%,1))
  2325. select(matchW%,3)
  2326.     Search$=
  2327. parse
  2328. do_it(Search$,-1)
  2329. [5    $
  2330. text(wi%,5)=
  2331. (printed%):
  2332. redraw_icon(wi%,5)
  2333. search_click(wi%,ic%,b%)
  2334.  searchkey%,index$,z%,addr2,oldaddr
  2335. oldaddr=addr
  2336. index$=$
  2337. text(wi%,3)
  2338.  index$<>Index$(searchkey%)
  2339.   searchkey%+=1
  2340. b%=(b% 
  2341.  %111)
  2342.  1,4:
  2343.  b%=4 
  2344.  z%=1 
  2345.  z%=-1
  2346.  ic% 
  2347. m1    SearchKey$=
  2348. stripright($
  2349. text(wi%,1)," ")
  2350. n)    
  2351.  chartype%(KF%(searchkey%,0)) 
  2352.       
  2353.  5,50,51,70,71:
  2354.       
  2355. check_date(KF%(searchkey%,0),SearchKey$,1,date$)=
  2356.  SearchKey$=
  2357. transform_date(KL%(searchkey%),date$) 
  2358.  SearchKey$=""
  2359. q        
  2360. r>    
  2361.  SearchKey$<>"" 
  2362.  addr=
  2363. find(SearchKey$,searchkey%,
  2364.  searchkey%<>key% 
  2365. t,      val$=
  2366. type(key%):kl%=
  2367. (key$(key%))
  2368. u*      addr2=
  2369. search(key$(key%),key%,2)
  2370. v/      
  2371.  addr2<0 
  2372.  addr=oldaddr 
  2373.  addr=addr2
  2374. w        
  2375.  b%=4 
  2376. y3      
  2377. close_it(wi%):
  2378. restore_caret(starthere%)
  2379.       
  2380. set_caret(0,wi%,1)
  2381. {        
  2382. })    
  2383.  chartype%(KF%(searchkey%,0)) 
  2384. ~P      
  2385.  5,50,51,70,71:SearchKey$=
  2386. transform_date(KL%(searchkey%),SearchKey$)
  2387.         
  2388. H    $
  2389. text(wi%,1)=SearchKey$:
  2390. redraw_icon(wi%,1):
  2391. set_caret(0,wi%,1)
  2392. 5    
  2393. close_it(wi%):
  2394. restore_caret(returnto%)
  2395.         
  2396.       searchkey%+=z%
  2397. O      
  2398.  searchkey%>Keys% 
  2399.  searchkey%=0 
  2400.  searchkey%<0 
  2401.  searchkey%=Keys%
  2402. =    
  2403.  Index$(searchkey%)<>"" 
  2404.  hide%?KF%(searchkey%,0)<>1
  2405.         
  2406.       searchkey%-=z%
  2407. U            
  2408.  searchkey%>Keys% 
  2409.  searchkey%=0 
  2410.  searchkey%<0 
  2411.  searchkey%=Keys%
  2412. ?    
  2413.  Index$(searchkey%)<>"" 
  2414.  hide%?KF%(searchkey%,0)<>1  
  2415. text(wi%,3)=Index$(searchkey%):
  2416. redraw_icon(wi%,3)
  2417. reform_click(wi%,ic%,b%)
  2418.  I%,J%,key%
  2419.  ic% 
  2420.  (b% 
  2421.  %11110000)>0 
  2422. 1    $Reformatted%=
  2423. force_pling($Reformatted%)
  2424. '    Filename$=$Reformatted%:Type%=0
  2425. init_drag(wi%,ic%,5)
  2426. 2    
  2427.  $Newform%="" 
  2428.  reformat%=1 
  2429.  reformat%=2
  2430.  1:$Reformatted%="":
  2431. close_window(wi%):
  2432. restore_caret(returnto%)
  2433. do_reformat
  2434. mergebase_click(wi%,ic%,b%)
  2435. text(wi%,4)=
  2436. force_pling($
  2437. text(wi%,4))
  2438. Filename$=$
  2439. text(wi%,4)
  2440.  (b% 
  2441.  %111) 
  2442.  1,4:
  2443.  ic% 
  2444.  (b% 
  2445.  %111)=4 
  2446.       
  2447. Filename$,".")>0 
  2448. 0        mergefiles%=
  2449. save(Filename$,0,0,0)
  2450.         
  2451. softerror("",33)
  2452.       
  2453.         
  2454. E    
  2455. text(wi%,3)="":
  2456. close_it(wi%):
  2457. restore_caret(returnto%)
  2458.  ic%=7 
  2459.  (b% 
  2460.  %11110000)>0 
  2461. 1  Type%=0:mergefiles%=
  2462. init_drag(wi%,ic%,5)
  2463. query_click(wi%,ic%,b%)
  2464.  (b% 
  2465.  %111) 
  2466.  1,4:
  2467.  ic% 
  2468. B    
  2469.  "Wimp_GetCaretPosition",,block%:caretpos%=block%!20
  2470. F    
  2471.  2:$Query%=query$:
  2472. set_caret(0,queryW%,0):
  2473. redraw_icon(wi%,0)
  2474.     $
  2475. text(helpW%,0)=""
  2476.     Match_tag%=Fieldnumber%
  2477. :    
  2478.  Match_tag%>0 
  2479. text(helpW%,0)=Tag$(Match_tag%)
  2480. 5    
  2481. position_window(helpW%,x%+64,y%-300,0,0,0,0)
  2482. 0    
  2483. set_caret(0,helpW%,6):fieldfunc$="help"
  2484. (    
  2485.  6,7,8,9,10,11:
  2486. invert(wi%,ic%)
  2487. prefs_click(wi%,ic%,b%)
  2488. b%=(b% 
  2489.  %111)
  2490.  1,4:
  2491.  ic% 
  2492. &    
  2493.  12:kill%=
  2494. selected(wi%,12)
  2495. Q    
  2496. shade(keypadW%,18,
  2497. selected(wi%,21)):
  2498. val_on_off(
  2499. selected(wi%,21))
  2500. W    
  2501.  27,28,29:
  2502. shade(wi%,25,
  2503. selected(wi%,29)):autosave%=29-
  2504. selected_esg(wi%,2)
  2505. 3    
  2506. set_icon(queryW%,1,
  2507. selected(wi%,30))
  2508. L    
  2509. shade(wi%,32,
  2510. selected(wi%,31)):autobalance%=
  2511. selected(wi%,31)
  2512. +    
  2513.  34:dupwarn%=
  2514. selected(prefsW%,34)
  2515. /    
  2516. (-1) 
  2517.  d$="Initial" 
  2518.  d$="Resources"
  2519. N    
  2520. get_preferences(prefsW%,"<Pbase$Dir>."+d$+".Preference"):
  2521. redraw(wi%)
  2522. selected(wi%,35) 
  2523. 9      
  2524. save_preferences(wi%,$database%+".Preference")
  2525. E      
  2526. save_preferences(wi%,"<Pbase$Dir>.Resources.Preference")
  2527.         
  2528.  b%=4 
  2529. "      $ImpulseApp%=$mergewith%
  2530.       
  2531. close_window(wi%)
  2532.       
  2533.  present%=7 
  2534.          starthere%=
  2535. start_at
  2536. %        
  2537. restore_caret(returnto%)
  2538.       
  2539.         
  2540. 4    
  2541. restore_window(wi%,remember%+winbuff%(4,1))
  2542. L    
  2543.  b%=4 
  2544. close_window(wi%):
  2545. restore_caret(returnto%) 
  2546. redraw(wi%)
  2547. H    
  2548. selected(wi%,ic%) 
  2549.  filemem%(file%,key%)=addr 
  2550.  filemem%()=-1
  2551. )    
  2552. auto_csv(
  2553. selected(wi%,44))
  2554. start_at
  2555.  F%,X%,S$
  2556. S$=$StartHere%
  2557. (S$)>0:F%=
  2558.  S$<>"":F%=
  2559. field(X%,S$,
  2560.  vtype$(chartype%(F%))<>"E" 
  2561. first_writable
  2562. $StartHere%=Tag$(F%)
  2563. =field%(F%)
  2564. fkey_click(wi%,ic%,b%)
  2565.  z%,K$,K%,Z%
  2566. b%=(b% 
  2567.  %111)
  2568.  1,4:
  2569.  (b% 
  2570.  %111)=4 
  2571.  z%=1 
  2572.  z%=-1
  2573.  ic% 
  2574.  4,5:
  2575. #    K$=$Fkeyequiv%:K%=
  2576. K$,2))
  2577.  ic% 
  2578.       
  2579.  4:K%+=z%
  2580.       
  2581.  5:K%-=z%
  2582.         
  2583.  K%=12 
  2584.  K%=0
  2585.  K%<0 
  2586.  K%=11
  2587. )    
  2588.  K%=0 
  2589.  K$="None" 
  2590.  K$="F"+
  2591.     *    $Fkeyequiv%=K$:
  2592. redraw_icon(wi%,3)
  2593. #    K$=$Fkeyequiv%:K%=
  2594. K$,2))
  2595.  K%>0 
  2596.       
  2597.  K%>9 
  2598.  K%+=64
  2599. %      
  2600. selected(wi%,1) 
  2601.  K%+=16
  2602. %      
  2603. selected(wi%,2) 
  2604.  K%+=32
  2605.       K%+=384
  2606. >      Z%=
  2607. key_assigned(K%):
  2608.  Z%<>-1 
  2609.  buttonfield%(1,Z%)=0
  2610. "      buttonfield%(1,kpad%)=K%
  2611.       
  2612.  kpad% 
  2613.         
  2614.  13,14,18:
  2615. C        Z%=
  2616. key_assigned(K%+16):
  2617.  Z%<>-1 
  2618.  buttonfield%(1,Z%)=0
  2619. *        buttonfield%(1,kpad%+10)=K%+16
  2620.       
  2621.         
  2622. )    
  2623.  b%=4 
  2624.  "Wimp_CreateMenu",,-1
  2625. $    
  2626.  "Wimp_CreateMenu",,-1
  2627. change_click(wi%,ic%,b%)
  2628. b%=(b% 
  2629.  %111)
  2630.  ic% 
  2631. %I    
  2632. changes(key%,Menufield%,$
  2633. text(changeW%,0),$
  2634. text(changeW%,1),
  2635.  b%=4 
  2636. close_it(wi%)
  2637. '!    
  2638. restore_caret(returnto%)
  2639. (4    
  2640. close_it(wi%):
  2641. restore_caret(returnto%)
  2642. move_click(wi%,ic%,b%)
  2643. b%=(b% 
  2644.  %111)
  2645.  b%=4 
  2646.  z%=1 
  2647.  b%=1 
  2648.  z%=-1 
  2649.  ic% 
  2650. 4#    
  2651. scycle(7,source%,-z%)
  2652. 5"    
  2653. scycle(7,source%,z%)
  2654. 6!    
  2655. scycle(8,dest%,-z%)
  2656. 7     
  2657. scycle(8,dest%,z%)
  2658. 8v    
  2659. shade(wi%,8,
  2660. shade(wi%,12,
  2661. shade(wi%,13,
  2662. shade(wi%,9,
  2663. text(wi%,1)="Move":
  2664. redraw_icon(wi%,1)
  2665. 9x    
  2666. shade(wi%,8,
  2667. shade(wi%,12,
  2668. shade(wi%,13,
  2669. shade(wi%,9,
  2670. text(wi%,1)="Delete":
  2671. redraw_icon(wi%,1)
  2672. :|    
  2673. shade(wi%,8,
  2674. shade(wi%,12,
  2675. shade(wi%,13,
  2676. shade(wi%,9,
  2677. text(wi%,1)="Accumulate":
  2678. redraw_icon(wi%,1)
  2679. save_keys
  2680. =F    
  2681. selected(wi%,5) 
  2682. selected(prefsW%,15) 
  2683.  undo%=1 
  2684.  undo%=2
  2685. >-    
  2686. move_records(key%,source%,dest%,top)
  2687. ?     addr=
  2688. moveto(key%,top,1)
  2689. @:    
  2690.  b%=4 
  2691. close_it(wi%):
  2692. restore_caret(starthere%)
  2693.  undo% 
  2694. C       
  2695. softerror("",142)
  2696. D       
  2697. softerror("",143)
  2698.       
  2699. F3      
  2700. load_index($database%+".PrimaryKey",0,
  2701. G#      f$=$database%+".Indices."
  2702.       
  2703.  Keys%>0 
  2704.         
  2705.  K%=1 
  2706.  Keys%
  2707. J-          
  2708. load_index(f$+Index$(K%),K%,
  2709.         
  2710.       
  2711. M"      
  2712. blob_deleterestore("R")
  2713. N        
  2714. O:    
  2715.  b%=4 
  2716. close_it(wi%):
  2717. restore_caret(starthere%)
  2718. P4    
  2719. close_it(wi%):
  2720. restore_caret(returnto%)
  2721. blob_deleterestore(A$)
  2722.  F,S$,M$
  2723. ($database%+".Deleted")
  2724.  F>0 
  2725.  A$="D" 
  2726. inform("",168,0) 
  2727. inform("",169,0)
  2728.     S$=
  2729. ]1      
  2730.  "R":
  2731.  "OS_CLI","Rename "+S$+" "+
  2732. ^(      
  2733.  "D":
  2734.  "OS_CLI","Remove "+S$
  2735. _        
  2736. close_it(informW%)
  2737. close_file(F)
  2738.  "OS_CLI","Delete "+$database%+".Deleted"
  2739.  addr=FNmoveto(key%,top,1)
  2740. undo%=0
  2741. scycle(icon%,
  2742.  file%,z%)
  2743. file%+=z%
  2744.  file%<0 
  2745.  file%=5
  2746.  file%=6 
  2747.  file%=0
  2748. text(moveW%,icon%)=$Subfile%(file%)
  2749. redraw_icon(moveW%,icon%)
  2750. csv_click(wi%,ic%,b%)
  2751. b%=(b% 
  2752.  %111)
  2753.  2,4:
  2754.  ic% 
  2755. w2    
  2756. show_pop_up_menu(delimiterM%,wi%,ic%)
  2757. x3    
  2758. show_pop_up_menu(terminatorM%,wi%,ic%)
  2759. y4    
  2760. show_pop_up_menu(scrolltermM%,wi%,ic%)
  2761.  1,4:
  2762.  ic% 
  2763. ,    
  2764. shade(wi%,4,(
  2765. selected(wi%,1)))
  2766. "    
  2767. text(wi%,9)="Import" 
  2768.       
  2769.  csvfunc$ 
  2770. 7        
  2771.  "ImportMain":
  2772. convert_csv($
  2773. text(wi%,13))
  2774. F        
  2775.  "ImportTable":
  2776. csv_to_table(Tablenumber%,$
  2777. text(wi%,13))
  2778. I        
  2779.  "ImportScroller":
  2780. csv_to_scroller(Scroller%,$
  2781. text(wi%,13))
  2782.       
  2783.         
  2784. %    
  2785.  b%=4 
  2786. close_window(csvW%)
  2787. d    
  2788. restore_window(wi%,remember%+winbuff%(0,1)):
  2789.  b%=4 
  2790. close_window(wi%) 
  2791. redraw(wi%)
  2792. selected(wi%,18) 
  2793. ?      
  2794. save_csv_options("<Pbase$Dir>.Resources.CSVoptions")
  2795. 7      
  2796. save_csv_options($database%+".CSVoptions")
  2797.         
  2798. /    
  2799. (-1) 
  2800.  d$="Initial" 
  2801.  d$="Resources"
  2802. 9    
  2803. get_csv_options("<Pbase$Dir>."+d$+".CSVoptions")
  2804. 7    
  2805. selected(csvW%,24) 
  2806. softerror("",132)
  2807. merge_click(wi%,ic%)
  2808.  ic% 
  2809.  "Impulse_SendMessage",&201,":"+$mergewith%+"."+document$+" Print",,,,printtag%,mytask%
  2810.   merging%=
  2811. :finished%=
  2812.   $mergewith%=$ImpulseApp%
  2813.  "Impulse_SendMessage",&200,":"+$mergewith%+"."+document$+" Edit Off",0,0,0,-1,mytask%
  2814. @  mergenum%=0:$
  2815. text(wi%,7)=
  2816. (mergenum%):
  2817. redraw_icon(wi%,7)
  2818. selected(queryW%,4) 
  2819.  direction%=-1 
  2820.  direction%=1
  2821. 4  addr=
  2822. neighbour(key%,addr,(-direction%+1) 
  2823. selected(mergeW%,12) 
  2824.  addr=
  2825. moveto(key%,addr,direction%) 
  2826.  addr=
  2827. moveto(key%,top,direction%)
  2828.   merging%=
  2829.  "Impulse_SendMessage",&200,":"+$mergewith%+"."+document$+" Edit On",,,,-1,mytask%
  2830. deselect(mergeW%,3)
  2831. close_file(dbasehandle%):
  2832. close_it(wi%)
  2833.   merging%=
  2834.  "Impulse_SendMessage",&200,":"+$mergewith%+"."+document$+" ClearMerge",,,,-1,mytask%
  2835.  "Impulse_SendMessage",&200,":"+$mergewith%+"."+document$+" Edit On",,,,-1,mytask%
  2836. size_click(wi%,ic%,b%)
  2837.  recs$,inc$
  2838.  present%<>7 
  2839.  "Wimp_CreateMenu",,-1:
  2840. 9recs$=
  2841. (RA%):keybase%=SHkeyptr%(0):inc$=
  2842. (keybase%!4)
  2843. b%=(b% 
  2844.  %111)
  2845.  1,4:
  2846.  ic% 
  2847.       
  2848. ($Records%)<=0:
  2849.       
  2850. softerror("",71)
  2851. 0      $Records%=recs$:
  2852. redraw_icon(sizeW%,1)
  2853.       
  2854. ($Increment%)<0
  2855.       
  2856. softerror("",72)
  2857. 3      $Increment%=inc$:
  2858. redraw_icon(sizeW%,3)  
  2859.       
  2860. (      
  2861. change_length(
  2862. ($Records%),
  2863.       
  2864. save_keys
  2865. "      
  2866.  "Wimp_CreateMenu",,-1
  2867.         
  2868. (    $Records%=recs$:$Increment%=inc$
  2869.      
  2870.  "Wimp_CreateMenu",,-1
  2871. table_click(T%)
  2872.  S$,tablefield%
  2873. `NewTab%=(
  2874. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)="
  2875. *extra%=-NewTab%*(Rows%*(TabFields%+1))
  2876. lit(tableM%,1,NewTab% 
  2877.  Modify%)
  2878. $tableM%=table$(T%)
  2879.  ic%>=0 
  2880. (  tablefield%=(ic% 
  2881.  (TabFields%+1))
  2882.  tablefield%=0
  2883.  2047 
  2884.  ic%<Rows%*(TabFields%+1) 
  2885. "    S$=$
  2886. text(tableW%(T%),ic%)
  2887. 1    
  2888. enter_string(S$,oldwindow%,oldicon%)    
  2889.  1024:
  2890.  ic%<Rows%*(TabFields%+1) 
  2891.  Access%=
  2892. <    !block%=tableW%(T%):
  2893.  "Wimp_GetWindowState",,block%
  2894. Q    
  2895.  "Wimp_SetCaretPosition",tableW%(T%),ic%,x%-block%!4+block%!20,y%,-1,-1
  2896. asterisk(
  2897. '  sort_tabcol%=ic% 
  2898.  (TabFields%+1)
  2899.  sort_tabcol%>=0 
  2900. lit(tableM%,3,Access%)
  2901.  NewTab% 
  2902. B      h$=$
  2903. text(tableW%(T%),Rows%*(TabFields%+1)+sort_tabcol%)
  2904. %      $SortTabCol%="Sort "+
  2905. h$,9)
  2906. 7      
  2907.  $SortTabCol%="Sort column "+
  2908. (sort_tabcol%)
  2909.         
  2910. lit(tableM%,3,
  2911. lit(tableM%,7,
  2912. selected(passW%,13))
  2913. lit(tableM%,6,
  2914. selected(passW%,13))
  2915. show_menu(tableM%,x%-64,y%)
  2916.  256:
  2917. invert(wi%,tablefield%+extra%)
  2918. @  field$=
  2919. (tablefield%):
  2920.  tablefield%<10 
  2921.  field$="0"+field$
  2922.   field$+=":"
  2923. selected(wi%,tablefield%+extra%) 
  2924.     printrel$(T%)+=field$
  2925.         
  2926. !    P%=
  2927. printrel$(T%),field$)
  2928. ?    printrel$(T%)=
  2929. printrel$(T%),P%-1)+
  2930. printrel$(T%),P%+3)
  2931. set_icon(printW%,5,(printrel$(T%)<>""))
  2932. enter_string(S$,wi%,
  2933.  ic%)
  2934.  L%,ok%,scroll%,T%,N$
  2935.  wi%=0 
  2936.  wi% 
  2937.  mainW%:
  2938.  chartype%(Fieldnumber%) 
  2939.  0,1,2,3,4,63:ok%=
  2940.  scrollerW%(Scroller%):ok%=
  2941. :scroll%=
  2942. :cell$=$
  2943. text(wi%,ic%)
  2944. :ok%=
  2945.  ok% 
  2946. buffer_length(wi%,ic%)
  2947. (S$)<=L% 
  2948. #    scratchpad$=$
  2949. text(wi%,ic%)
  2950.     $
  2951. text(wi%,ic%)=S$
  2952. redraw_icon(wi%,ic%)
  2953. set_caret(0,wi%,ic%)
  2954.  scroll% 
  2955. /      
  2956. scroller_press(wi%,ic%,Scroller%,13)
  2957.       ScrollChanged%=
  2958. >      
  2959.  Moves caret to next cell. New row if Shift pressed
  2960.         
  2961. $    
  2962. softerror(""""+S$+"""",7)
  2963. scroll_click
  2964.  (b% 
  2965.  %111)=2 
  2966. row%=(ic% 
  2967. 0$tabcol%=
  2968. (row%):
  2969. redraw_icon(tabcreateW%,8)
  2970. list_click(x%,y%,b%,wi%)
  2971.  F%,N%,line%,xpos%,column%,last%
  2972. !block%=wi%
  2973.  "Wimp_GetWindowState",,block%
  2974.     #.line%=((block%!16-block%!24-y%+36) 
  2975.  36)-1
  2976.     $&xpos%=(x%-block%!4+block%!20) 
  2977.  xpos%<Lmargin% 
  2978.  xpos%>LenLine%-3 
  2979.  format$="horiz" 
  2980.     column%+=1
  2981.     )4  
  2982.  Tab%(column%)>xpos% 
  2983.  column%=PrintFields%+1
  2984.   column%-=1
  2985.     +%  F%=
  2986. fnum(
  2987. Form$,column%*2-1,2))
  2988.  (b% 
  2989.  %111) 
  2990.  chartype%(F%) 
  2991.     02    
  2992.  5,50,51,70,71,53,55,73,76:sortfield%=F% 
  2993. :sortfield%=0
  2994.     3:  $SortTextCol%="Sort "+Tag$(F%):sort_textcol%=column%
  2995.     42  
  2996. lit(listM%,1,(format$="horiz") 
  2997.  nosort%)
  2998.     5!  
  2999. show_menu(listM%,x%-64,y%)
  3000.  1,4:
  3001.   SHrecptr%=!recanchor%
  3002.   R%=SHrecptr%!(line%*4)
  3003.   last%=
  3004. (Form$) 
  3005.     :(  
  3006.  R%<RA% 
  3007.  R%>=0 
  3008. check_record 
  3009.     ;$    addr=
  3010. find("#"+
  3011. (R%),key%,
  3012.  format$="vert" 
  3013.       
  3014.         N%+=1:line%-=1
  3015.     ?.      
  3016.  SHrecptr%!(line%*4)<>R% 
  3017.  N%=last%
  3018.     @(      F%=
  3019. fnum(
  3020. Form$,N%*2-1,2))    
  3021.     A        
  3022.  F%>0 
  3023.  F%<=fields% 
  3024.     C$      
  3025.  vtype$(chartype%(F%)) 
  3026.     D,        
  3027.  "E":
  3028. restore_caret(field%(F%))
  3029.         
  3030.  "L":
  3031.     F#        S%=
  3032. scroller_number(F%)
  3033.     G*        
  3034. set_caret(0,scrollerW%(S%),0)
  3035.     H(        
  3036. restore_caret(starthere%)
  3037.       
  3038.     J        
  3039.  (b% 
  3040.  %111)=4 
  3041.       
  3042. open_window(mainW%)
  3043.       
  3044.       
  3045.  F%>0 
  3046.     OL        !block%=mainW%:block%!4=desc%(F%):
  3047.  "Wimp_GetIconState",,block%
  3048.     PJ        xmin%=block%!8:ymin%=block%!12:xmax%=block%!16:ymax%=block%!20
  3049.     Q>        block%!4=field%(F%):
  3050.  "Wimp_GetIconState",,block%
  3051.     R>        w%=block%!16-block%!8+16:h%=block%!20-block%!12+16
  3052.     S4        scrollx%=block%!8-8:scrolly%=block%!20+8
  3053.         
  3054.     UE          
  3055.  xmax%<block%!8:w%=block%!16-xmin%+16:scrollx%=xmin%-8
  3056.     V4          
  3057.  xmin%>block%!16:w%=xmax%-block%!8+16
  3058.     W5          
  3059.  ymax%<block%!12:h%=block%!20-ymin%+16
  3060.     XF          
  3061.  ymin%>block%!20:h%=ymax%-block%!12+16:scrolly%=ymax%+8
  3062.         
  3063.     ZT        
  3064. position_window(mainW%,x%-(w% 
  3065.  2),y%-(h% 
  3066.  2),w%,h%,scrollx%,scrolly%)
  3067.       
  3068.     \        
  3069. match_click(wi%,ic%,b%)
  3070.  not%,and%,or%
  3071. b%=(b% 
  3072.  %111)
  3073. selected_esg(matchW%,1)=8 
  3074.     e#  
  3075. selected_esg(printW%,4) 
  3076.     f!    
  3077.  22:reportdest$="Window"
  3078.  23:reportdest$="File"
  3079.     h"    
  3080.  25:reportdest$="Printer"
  3081.  reportdest$="Window"
  3082.  ic% 
  3083.     o&    
  3084. selected(wi%,ic%),
  3085.     q+    
  3086. deselect(wi%,
  3087. selected_esg(wi%,1))
  3088.     r,    
  3089. select(wi%,8):$
  3090. text(wi%,0)="Print"
  3091.     s5    
  3092. close_it(wi%):
  3093. restore_caret(starthere%)    
  3094. (-1) 
  3095.     v@      Search$="":displayed%=REC%:leaf$=
  3096. key$(0),NameLength%)
  3097.       
  3098.     xA      Search$=
  3099. query:displayed%=-1:leaf$=
  3100. query$,NameLength%)
  3101.     yD      $Query%="":
  3102. redraw_icon(queryW%,0):
  3103. set_caret(0,queryW%,0)
  3104.     z        
  3105.     {E    TextName$=$database%+".PrintJobs."+leaf$:$SaveName%=TextName$
  3106.  reportdest$ 
  3107.       
  3108.  "Window","Printer":
  3109.     ~$      
  3110. do_it(Search$,displayed%)
  3111.       
  3112.  "File":
  3113.       savefunc$="Save list"
  3114. 3      $SaveSprite%="sfile_fff;Pptr_hand,4,0;R2"
  3115. 0      
  3116. shade(saveW%,4,
  3117. deselect(saveW%,4)
  3118. .      
  3119. position_window(saveW%,0,0,0,0,0,0)
  3120.        
  3121. set_caret(0,saveW%,2)
  3122.         
  3123. M    
  3124.  b%=4 
  3125. selected(wi%,8) 
  3126. close_it(wi%):
  3127. restore_caret(starthere%)
  3128.  b%=4 
  3129.       fieldfunc$="getcalc"
  3130. 9      fieldsM%=
  3131. field_menu(items%,2+(printorder$=""))
  3132. -      
  3133. show_pop_up_menu(fieldsM%,wi%,ic%)
  3134.         
  3135.  3,8,9,10:
  3136. !    
  3137. selected_esg(wi%,1) 
  3138.       
  3139.  3:S$="Count"
  3140.       
  3141.  8:S$="Print"
  3142.       
  3143.  9:S$="Mark"
  3144.       
  3145.  10:S$="Clear"
  3146.         
  3147. ,    $
  3148. text(wi%,0)=S$:
  3149. redraw_icon(wi%,0)
  3150. &    
  3151. shade(wi%,4,
  3152. selected(wi%,8))
  3153. &    
  3154. shade(wi%,6,
  3155. selected(wi%,8))
  3156. '    
  3157. shade(wi%,12,
  3158. selected(wi%,8))
  3159. 2    
  3160. position_window(printW%,0,0,0,0,0,0)
  3161. 6    
  3162. update_selection(
  3163. selected(wi%,ic%),"00")
  3164. 6    
  3165. update_selection(
  3166. selected(wi%,ic%),"KK")
  3167. 7    
  3168. update_selection(
  3169. selected(wi%,ic%),"SF")
  3170.  ic%=7 
  3171.     fieldfunc$="getcalc"
  3172. 7    fieldsM%=
  3173. field_menu(items%,2+(printorder$=""))
  3174. +    
  3175. show_pop_up_menu(fieldsM%,wi%,ic%)
  3176. mark_click(wi%,ic%,b%)
  3177. b%=(b% 
  3178.  %111)
  3179.  1,4:
  3180.  ic% 
  3181. selected(wi%,0) 
  3182. *      SHmarkptr%?REC%=1:MarkedRecs%+=1
  3183. ,      
  3184.  SHmarkptr%?REC%=0:MarkedRecs%-=1
  3185.         
  3186. clear_marks(RA%)
  3187. 6    
  3188.  b%=4 
  3189. show_pop_up_menu(markM%,wi%,ic%)
  3190.  ic%=2 
  3191. show_pop_up_menu(markM%,wi%,ic%)
  3192. warn_of_marks
  3193. warn_of_marks
  3194.  MarkedRecs%>0 
  3195. shade(markW%,1,
  3196. ticked(markM%,0) 
  3197. set_icon_cols(queryW%,5,7+16*10)
  3198. ticked(markM%,1) 
  3199. set_icon_cols(queryW%,5,7+16*11)
  3200. set_icon_cols(queryW%,5,7+16)
  3201. shade(markW%,1,
  3202. help_click(wi%,ic%,b%)
  3203.  new$,I%,L%,tag$,item$
  3204. butt%=(b% 
  3205.  %111)
  3206. z%=(butt%=1)-(butt%=4)
  3207.  butt% 
  3208.  2,4:
  3209.  ic%=19 
  3210. %    tag$=$
  3211. text(wi%,0):L%=
  3212. (tag$)
  3213. &    fieldsM%=
  3214. field_menu(items%,1)
  3215.         
  3216. (      item$=$
  3217. menu_text(fieldsM%,I%)
  3218.       I%+=1
  3219. %    
  3220. item$,L%)=tag$ 
  3221.  I%>items%
  3222. )    
  3223. tick_one(fieldsM%,0,items%,I%-1)
  3224. +    
  3225. show_pop_up_menu(fieldsM%,wi%,ic%)
  3226.  butt% 
  3227.  1,4:
  3228.  ic% 
  3229.  1:new$="NOT (":not%=
  3230.  9:new$=" AND "
  3231.  10:new$=" OR "
  3232.  16,17:
  3233. S    Match_tag%=
  3234. find_next_valid_field(Match_tag%,"help",z%*((ic%=16)-(ic%=17)))
  3235. J    
  3236.  Match_tag%>0 
  3237. text(wi%,0)=Tag$(Match_tag%) 
  3238. text(wi%,0)=""
  3239. redraw_icon(wi%,0)
  3240. C    
  3241.  21:$Query%="":
  3242. redraw_icon(queryW%,0):
  3243. set_caret(0,wi%,6)
  3244.      op%=
  3245. selected_esg(wi%,1)
  3246.  op% 
  3247.       
  3248.  2:op$="="
  3249.       
  3250.  3:op$="{"
  3251.       
  3252.  4:op$="<"
  3253.       
  3254.  5:op$=">"
  3255.       
  3256.  11:op$="<>"
  3257.       
  3258.  13:op$=">="
  3259.       
  3260.  14:op$="<="
  3261.       
  3262.  15:op$="}{"
  3263.       
  3264.  22:op$="{{"
  3265.         
  3266.     tag$=$
  3267. text(wi%,0)
  3268.     contents$=$
  3269. text(wi%,6)
  3270.     new$=tag$+op$+contents$
  3271. 6    
  3272. close_it(helpW%):
  3273. set_caret(0,queryW%,0)
  3274.  new$<>"" 
  3275.  "Wimp_GetCaretPosition",,block%
  3276.   handle%=!block%
  3277.  handle%=queryW% 
  3278. enter_tag(new$)
  3279. /    
  3280.  $Query%+=new$:
  3281. redraw_icon(queryW%,0)
  3282.  not%=
  3283. $Query%)<>")" 
  3284.  $Query%+=")":not%=
  3285. redraw_icon(queryW%,0)
  3286. iconbar_click
  3287.  %111 
  3288. position_window(prefsW%,0,0,0,0,0,0)
  3289. selected(passW%,12) 
  3290. close_window(saveW%)
  3291. )    
  3292. show_menu(iconbarM%,x%-64,ybar%)
  3293.  $dbase%="No data" 
  3294.     $SaveName%="!DataBase"
  3295. 1    $SaveSprite%="snew_appl;Pptr_hand,4,0;R2"
  3296.          savefunc$="New database"
  3297. B    $
  3298. text(saveW%,4)="":
  3299. shade(saveW%,4,
  3300. deselect(saveW%,4)
  3301. .    
  3302.  "Wimp_CreateMenu",,saveW%,x%-50,440
  3303. show_windows
  3304. update_external(REC%)
  3305.  chartype%(OLE%) 
  3306. show_text_block(OLE%,REC%)
  3307. show_picture(OLE%,REC%)
  3308. redraw_icon(mainW%,field%(OLE%))
  3309. restore_caret(returnto%)
  3310. restore_caret(ic%)
  3311.  Access% 
  3312.  ic%=-1 
  3313.  ic%=starthere%
  3314.  ic%>=0 
  3315.      
  3316. set_caret(0,mainW%,ic%)
  3317. identify_field(ic%)
  3318. main_click(wi%,ic%,b%)
  3319.  P%,F%,H$,L%,T%,N$,field$,V%,char%
  3320.  exit% 
  3321.  present%=7 
  3322.  adjust%=
  3323. validate(Fieldnumber%,T%,N$)=
  3324.  changed%=
  3325. update_calcs(Fieldnumber%)
  3326.  flash% 
  3327. set_icon(wi%,field%(flash%),state%):flash%=
  3328.  present% 
  3329.  0,3:
  3330. design_field(b%,ic%,
  3331. first_writable>0 
  3332. default_key
  3333. design_field(b%,ic%,
  3334.  5,7:
  3335.  adjust% 
  3336. design_field(b%,ic%,
  3337. 1        
  3338. identify_field(ic%)
  3339. 3d    
  3340.  b%<>2 
  3341.  (Fieldnumber%=0 
  3342.  Fieldnumber%>fields%) 
  3343.  char%=-1 
  3344.  char%=chartype%(Fieldnumber%)
  3345. 4,    
  3346. selected(prefsW%,19) 
  3347. relations
  3348.  2047 
  3349.       
  3350.       
  3351.  char% 
  3352. 8D        
  3353. show_user_menu(menubuff%,Fieldnumber%,(b% 
  3354.  %111))
  3355. 9g        
  3356.  9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31:
  3357. fkey_status(char%-9)
  3358.         
  3359. ;!        
  3360. close_window(saveW%)
  3361. <.        
  3362. selected(passW%,11) 
  3363.  Modify% 
  3364. =           
  3365. set_up_field_menu
  3366. >)          
  3367. show_menu(mainM%,x%-64,y%)
  3368.         
  3369.       
  3370.       
  3371.       
  3372.  char% 
  3373. CD        
  3374.  customise% 
  3375. (libfunc$+"_button(wi%,ic%,b%)")
  3376. Dq        
  3377.  0,1,2,3,4,5,6,7,8,39,46,47,48,49,50,51,52,53,54,55,56,57,58,63,68,69,70,71,72,73,74,75,76,77,78,79:
  3378. E.        
  3379.  "Wimp_GetCaretPosition",,block%
  3380.         first%=
  3381. find_caret
  3382. G0        
  3383. select_range(first%,Fieldnumber%,
  3384. Hk        
  3385.  9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:
  3386. keypad_click(wi%,char%-9,1)
  3387. Im        
  3388. check_record 
  3389. invert(wi%,ic%):
  3390. filter(wi%,b%,
  3391. selected(wi%,field%(buttonfield%(0,22))))
  3392.         
  3393.         
  3394. LK          
  3395. (-2):displayit%?Fieldnumber%=(displayit%?Fieldnumber%) 
  3396.           
  3397. N*          col%=
  3398. get_icon_cols(wi%,ic%)
  3399. O6          col%=((col%>>4) 
  3400.  (col%<<4)) 
  3401.  %11111111
  3402. P*          
  3403. set_icon_cols(wi%,ic%,col%)
  3404. Q'          boxon%=((col% 
  3405.  %1111)<2)
  3406. R*          
  3407. update_selection(boxon%,"")
  3408.         
  3409. TY        
  3410.  37,38:
  3411. (-2):displayit%?Fieldnumber%=(displayit%?Fieldnumber%) 
  3412.  1        
  3413.         
  3414.  41,42,43,61,62:
  3415. V(        col%=
  3416. get_icon_cols(wi%,ic%)
  3417. W4        col%=((col%>>4) 
  3418.  (col%<<4)) 
  3419.  %11111111
  3420. X(        
  3421. set_icon_cols(wi%,ic%,col%)
  3422. Y%        boxon%=((col% 
  3423.  %1111)<2)
  3424. Z(        
  3425. update_selection(boxon%,"")
  3426. [D        
  3427. show_user_menu(menubuff%,Fieldnumber%,(b% 
  3428.  %111))
  3429.         
  3430. ]c        
  3431.  link$(Fieldnumber%)="" 
  3432. softerror("",188) 
  3433. softerror(
  3434. link$(Fieldnumber%),2),186)
  3435.         
  3436. _c        
  3437.  link$(Fieldnumber%)="" 
  3438. softerror("",188) 
  3439. softerror(
  3440. link$(Fieldnumber%),2),187)
  3441.         
  3442.         
  3443.           
  3444. (-1):
  3445. c_          
  3446.  $Rf%(Fieldnumber%)="" 
  3447. softerror("",188) 
  3448. softerror($Rf%(Fieldnumber%),165)
  3449. dK          
  3450. (-2):displayit%?Fieldnumber%=(displayit%?Fieldnumber%) 
  3451.           
  3452. f*          col%=
  3453. get_icon_cols(wi%,ic%)
  3454. g6          col%=((col%>>4) 
  3455.  (col%<<4)) 
  3456.  %11111111
  3457. h*          
  3458. set_icon_cols(wi%,ic%,col%)
  3459. i'          boxon%=((col% 
  3460.  %1111)<2)
  3461. j4          
  3462. update_selection(boxon%,"")          
  3463.         
  3464.       
  3465.       
  3466.       
  3467.  char% 
  3468. oD        
  3469.  customise% 
  3470. (libfunc$+"_button(wi%,ic%,b%)")
  3471. p.        
  3472. internet($Rf%(Fieldnumber%))
  3473. qk        
  3474.  9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:
  3475. keypad_click(wi%,char%-9,4)
  3476. rm        
  3477. check_record 
  3478. invert(wi%,ic%):
  3479. filter(wi%,b%,
  3480. selected(wi%,field%(buttonfield%(0,22))))
  3481. s?        
  3482. selected(passW%,14) 
  3483. match(x%-396,y%-131)
  3484. tD        
  3485. show_user_menu(menubuff%,Fieldnumber%,(b% 
  3486.  %111))
  3487. u(        
  3488. check_record 
  3489.         
  3490.         
  3491. x4          
  3492. (-2):
  3493. enter_tag(Tag$(Fieldnumber%))
  3494. y.          
  3495. edit_blob(Fieldnumber%,char%)
  3496.         
  3497. {8        
  3498.  37,38,39,40:
  3499. edit_blob(Fieldnumber%,char%)
  3500.         
  3501.  41,42,43:
  3502.         
  3503. ~4          
  3504. (-2):
  3505. enter_tag(Tag$(Fieldnumber%))
  3506.           
  3507.  Access%:
  3508.           
  3509. invert(wi%,ic%)
  3510. S          
  3511. selected(wi%,ic%) 
  3512.  $Rf%(Fieldnumber%)=" " 
  3513.  $Rf%(Fieldnumber%)=""
  3514.         
  3515.         
  3516.  61,62:
  3517.         
  3518. 4          
  3519. (-2):
  3520. enter_tag(Tag$(Fieldnumber%))
  3521.           
  3522.  Access%:
  3523. 5          V%=
  3524. val(wi%,ic%):P%=
  3525. $V%,";S"):V%+=P%+1
  3526.           
  3527.  $V% 
  3528. D            
  3529.  "null","dontcare":$V%="yes":$Rf%(Fieldnumber%)=" "
  3530. 8            
  3531.  "yes":$V%="no":$Rf%(Fieldnumber%)=
  3532.             
  3533.  "no":
  3534. 8            
  3535.  char%=61 
  3536.  $V%="null" 
  3537.  $V%="dontcare"
  3538. %            $Rf%(Fieldnumber%)=""
  3539.           
  3540. #          
  3541. redraw_icon(wi%,ic%)
  3542.         
  3543.                  
  3544. :        
  3545.  Access% 
  3546.  quit%=
  3547. check_record 
  3548.  quit%=
  3549. ,        
  3550. execute_file(Fieldnumber%)
  3551.         
  3552. +        
  3553. link$(Fieldnumber%),1)="@" 
  3554. *          dir$=
  3555. link$(Fieldnumber%),2)
  3556. 0          dir$=
  3557. filename(dir$,"PrintRes",-1)
  3558. V          
  3559.  "OS_CLI","Filer_OpenDir "+dir$+" "+
  3560. (oldx%)+" "+
  3561. (oldy%)+" "+dirdisp$
  3562. !          
  3563. softerror("",91)
  3564.         
  3565.         
  3566.         
  3567.         
  3568. 4          
  3569. (-2):
  3570. enter_tag(Tag$(Fieldnumber%))
  3571. .          
  3572. get_remote_file(Fieldnumber%)
  3573.         
  3574.            
  3575.         
  3576.         
  3577. (-1) 
  3578. #          
  3579. lookup(Fieldnumber%)
  3580. 3          
  3581. relations:
  3582. tone_dial(Fieldnumber%)
  3583.         
  3584.       
  3585.       
  3586.       
  3587.  char% 
  3588. w        
  3589.  0,1,2,3,4,5,6,7,8,39,46,47,48,49,50,51,52,53,54,55,56,57,58,63,68,69,70,71,72,73,74,75,76,77,78,79:      
  3590. \        
  3591.  Access% 
  3592.  hide%?Fieldnumber%=0 
  3593.  dragfield%=Fieldnumber%:
  3594. init_drag(wi%,ic%,5)
  3595.       
  3596.      
  3597.       
  3598.  256:
  3599.       
  3600.  char% 
  3601. q        
  3602.  0,1,2,3,4,5,6,7,8,39,46,47,48,49,50,51,52,53,54,55,56,57,58,63,68,69,70,71,72,73,74,75,76,77,78,79:
  3603. n        
  3604. get_icon_cols(wi%,ic%)<>winback%*17 
  3605. invert(wi%,ic%):
  3606. update_selection(
  3607. selected(wi%,ic%),"")
  3608.       
  3609.       
  3610.  vtype$(char%)="E" 
  3611. D        
  3612. find_caret=0 
  3613. get_icon_cols(wi%,ic%)<>winback%*17 
  3614. :          !block%=wi%:
  3615.  "Wimp_GetWindowState",,block%
  3616. [          
  3617.  Access% 
  3618.  "Wimp_SetCaretPosition",wi%,ic%,x%-block%!4+block%!20,y%,-1,-1
  3619.         
  3620.       
  3621.      
  3622.       
  3623.  1024:
  3624.       
  3625. (-2) 
  3626.         
  3627.  char% 
  3628. s          
  3629.  0,1,2,3,4,5,6,7,8,39,46,47,48,49,50,51,52,53,54,55,56,57,58,63,68,69,70,71,72,73,74,75,76,77,78,79:
  3630. ,          
  3631. enter_tag(Tag$(Fieldnumber%))
  3632.         
  3633.         
  3634. !        
  3635.  vtype$(char%)="E" 
  3636. 6          
  3637. get_icon_cols(wi%,ic%)<>winback%*17 
  3638. <            !block%=wi%:
  3639.  "Wimp_GetWindowState",,block%
  3640. ]            
  3641.  Access% 
  3642.  "Wimp_SetCaretPosition",wi%,ic%,x%-block%!4+block%!20,y%,-1,-1
  3643.           
  3644. &          
  3645. user_menu(Fieldnumber%)
  3646.         
  3647.       
  3648.         
  3649. user_menu(F%)
  3650.  I%,M%
  3651. selected(prefsW%,49) 
  3652.   I%+=1
  3653.  chartype%(I%)=33 
  3654.  Tag$(I%)=Tag$(F%) 
  3655.  M%=I%
  3656.  M%>0 
  3657.  I%=fields%
  3658.  M%>0 
  3659. show_user_menu(menubuff%,M%,4) 
  3660.  "Wimp_CreateMenu",,-1
  3661. selected(prefsW%,19) 
  3662. relations
  3663. find_caret
  3664.  wi%,ic%,S%,F%
  3665.  "Wimp_GetCaretPosition",,block%
  3666. wi%=!block%:ic%=block%!4
  3667. scroller_num2(wi%)
  3668.  wi% 
  3669.  mainW%:F%=((block%!4)+2) 
  3670.  scrollerW%(S%):F%=scrolldata%(S%,0)
  3671. tone_dial(F%)
  3672. -f$="<Pbase$Dir>.Resources.Dial "+$Rf%(F%)
  3673.  "OS_File",5,f$ 
  3674.  d%=0 
  3675. phone(F%) 
  3676. >DialDelay%
  3677.  $Rf%(F%)<>"" 
  3678.  "OS_CLI","Run "+f$
  3679. phone(F%)
  3680.  D$,T$
  3681. text(mainW%,desc%(F%)))
  3682. u(Tag$(F%))
  3683. D$,"TEL")>0 
  3684. T$,"TEL")>0) 
  3685. enter_tag(tag$)
  3686.  wi%,S$
  3687.  "Wimp_GetCaretPosition",,block%
  3688. +wi%=!block%:ic%=block%!4:pos%=block%!20
  3689.  wi% 
  3690.  queryW%,helpW%,calcW%,extracalcW%:
  3691.   S$=$
  3692. text(wi%,ic%)
  3693. #  S$=
  3694. S$,pos%)+tag$+
  3695. S$,pos%+1)
  3696. text(wi%,ic%)=S$
  3697. set_caret(pos%+
  3698. (tag$),wi%,ic%)
  3699. redraw_icon(wi%,ic%)
  3700. set_up_field_menu
  3701.  I%,tabmen%,V%
  3702. tabmen%=(LastTable%<>-1)
  3703.  tabmen% 
  3704. make_table_menu(TabsLoaded$):
  3705. tick_one(valtablesM%,0,LastTable%,LastTable%+1)
  3706. V%=chartype%(Fieldnumber%)
  3707.  I%=0 
  3708. lit(fieldM%,I%,
  3709. $AnalyseFunc%="Analyse"
  3710.  Fieldnumber%>0 
  3711. get_icon_cols(wi%,ic%)<>winback%*17 
  3712.   Menufield%=Fieldnumber%
  3713. lit(mainM%,1,
  3714. E  $Fieldpos%="Field: "+Tag$(Fieldnumber%):Menufield%=Fieldnumber%
  3715. &  $LinkTitle%="Field: "+Fieldname$
  3716. >  $CalcForm%=Tag$(Fieldnumber%)+"=":
  3717. redraw_icon(calcW%,0)
  3718.  5,50,51,70,71:
  3719. $    isadate%=
  3720. lit(fieldM%,1,
  3721. &    $AnalyseFunc%="Analyse months"
  3722. :isadate%=
  3723. is_a_key(Fieldnumber%)>=0 
  3724. lit(fieldM%,1,
  3725. _    
  3726.  isadate%=
  3727. selected(mainW%,field%(Fieldnumber%)) 
  3728.  $AnalyseFunc%="Analyse index"
  3729.  0,1,2,3,4,5,8,63:
  3730. lit(fieldM%,0,Access%)
  3731. lit(fieldM%,2,Access%)
  3732. )    
  3733. lit(fieldM%,3,Access% 
  3734.  tabmen%)
  3735. lit(fieldM%,5,Access%)
  3736. lit(fieldM%,9,
  3737. set_up_key_window
  3738. *    $ChangeTitle%="Field: "+Fieldname$
  3739.  3    $
  3740. text(changeW%,0)="":$
  3741. text(changeW%,1)=""
  3742. link_status
  3743.  6,7:
  3744. lit(fieldM%,0,Modify%)
  3745. lit(fieldM%,4,Modify%)
  3746. %T    
  3747.  V%=6 
  3748. calc_link("Calculations...",6) 
  3749. calc_link("Combine fields...",7)
  3750. set_up_key_window    
  3751. 'H    
  3752.  41,42,43,61,62:
  3753. lit(fieldM%,2,Modify%):
  3754. lit(fieldM%,9,Modify%)
  3755. (4    
  3756.  46,47,48,49,50,51,52,53,54,55,56,57,58,79:
  3757.  V%=47 
  3758. *!      
  3759. lit(fieldM%,4,Modify%)
  3760. +"      
  3761. lit(fieldM%,10,Modify%)
  3762. ,,      
  3763. calc_link("Set base value...",47)
  3764. -        
  3765. lit(fieldM%,0,Access%)
  3766. set_up_key_window
  3767.  36,39:
  3768. 1D    
  3769. blob_path(
  3770. ,$database%,REC%,Fieldnumber%,V%,object$)>=0 
  3771. 2'      $RemoveOb%="Remove text file"
  3772. 3#      $SaveOb%="Save text file"
  3773. 4!      
  3774. lit(fieldM%,6,Access%)
  3775. 5.      
  3776. lit(fieldM%,7,
  3777. selected(passW%,13))
  3778. 65      $SaveName%=$database%+".PrintJobs.TextFile"
  3779. 73      $SaveSprite%="sfile_fff;Pptr_hand,4,0;R2"
  3780.       savefunc$="Save text"
  3781. 9        
  3782.  37,40:
  3783. ;D    
  3784. blob_path(
  3785. ,$database%,REC%,Fieldnumber%,V%,object$)>=0 
  3786. <$      $RemoveOb%="Remove sprite"
  3787. =       $SaveOb%="Save sprite"
  3788. >!      
  3789. lit(fieldM%,6,Access%)
  3790. ?.      
  3791. lit(fieldM%,7,
  3792. selected(passW%,13))
  3793. @3      $SaveName%=$database%+".PrintJobs.Sprite"
  3794. A3      $SaveSprite%="sfile_ff9;Pptr_hand,4,0;R2"
  3795. B!      savefunc$="Save sprite"
  3796. C        
  3797. ED    
  3798. blob_path(
  3799. ,$database%,REC%,Fieldnumber%,V%,object$)>=0 
  3800. F&      $RemoveOb%="Remove drawfile"
  3801. G"      $SaveOb%="Save drawfile"
  3802. H!      
  3803. lit(fieldM%,6,Access%)
  3804. I.      
  3805. lit(fieldM%,7,
  3806. selected(passW%,13))
  3807. J5      $SaveName%=$database%+".PrintJobs.DrawFile"
  3808. K3      $SaveSprite%="sfile_aff;Pptr_hand,4,0;R2"
  3809.       savefunc$="Save draw"
  3810. M        
  3811. N"    
  3812.  35:                     
  3813. O%    $RemoveOb%="Unlink directory"
  3814.     $SaveOb%="Save object"
  3815. Q;    
  3816.  link$(Fieldnumber%)<>"" 
  3817. lit(fieldM%,6,Access%)
  3818. S     $RemoveOb%="Unlink file"
  3819.     $SaveOb%="Save object"
  3820. U;    
  3821.  link$(Fieldnumber%)<>"" 
  3822. lit(fieldM%,6,Access%)
  3823. W     $RemoveOb%="Unlink file"
  3824.     $SaveOb%="Save object"
  3825. Y"    
  3826.  $Rf%(Fieldnumber%)<>"" 
  3827. Z9      
  3828. lit(fieldM%,6,Access%):
  3829. lit(fieldM%,7,Access%)
  3830. [.      $SaveName%=
  3831. leaf($Rf%(Fieldnumber%))
  3832. \K      S$=$
  3833. val(mainW%,field%(Fieldnumber%)):P%=
  3834. S$,";S"):spr$=
  3835. S$,P%+1)
  3836. ]/      $SaveSprite%=spr$+";Pptr_hand,4,0;R2"
  3837.       savefunc$=$SaveOb%
  3838. _        
  3839. lit(fieldM%,0,Access%)
  3840. lit(fieldM%,2,Access%)
  3841. set_up_key_window
  3842. c*    $ChangeTitle%="Field: "+Fieldname$
  3843. d3    $
  3844. text(changeW%,0)="":$
  3845. text(changeW%,1)=""
  3846.  64,65,66,67:
  3847. f"    $Fieldpos%+="#"+
  3848. (Scrcol%)
  3849. g)    
  3850. lit(fieldM%,3,Access% 
  3851.  tabmen%)
  3852. link_status
  3853.     $RemoveOb%="Blank list"
  3854.     $SaveOb%="Save as list"
  3855. lit(fieldM%,8,Access%)
  3856. lD    
  3857. blob_path(
  3858. ,$database%,REC%,Fieldnumber%,V%,object$)>=0 
  3859. m!      
  3860. lit(fieldM%,6,Access%)
  3861. n.      
  3862. lit(fieldM%,7,
  3863. selected(passW%,13))
  3864. o<      $SaveName%=$database%+".PrintJobs."+
  3865. leaf(object$)
  3866. p        
  3867. r@  $
  3868. text(saveW%,4)="":
  3869. shade(saveW%,4,
  3870. deselect(saveW%,4)
  3871. lit(mainM%,1,
  3872. ):$Fieldpos%="Field: """""
  3873. set_up_key_window
  3874.  I%,J%
  3875.  I%=0 
  3876.   keyfield%(I%)=0
  3877.  J%=12 
  3878. |     $
  3879. text(keyW%,4*I%+J%)=""
  3880. keyfield%(0)=Fieldnumber%
  3881. text(keyW%,12)=Tag$(Fieldnumber%)
  3882. text(keyW%,14)="L"
  3883. text(keyW%,15)=
  3884. (len%(Fieldnumber%))
  3885. -keylimit%=TextLength%:$
  3886. text(keyW%,29)=""
  3887. keylen%=keylimit%
  3888. update_selection(add%,field$)
  3889.  P%,SP%,F%,SF%
  3890. "F%=Fieldnumber%:SF%=(F% 
  3891.  128)
  3892.  field$="" 
  3893. /  field$=
  3894. ~(F%):
  3895.  F%<16 
  3896.  field$="0"+field$
  3897. 4  sfield$=
  3898. ~(SF%):
  3899.  SF%<16 
  3900.  sfield$="0"+sfield$
  3901.  add% 
  3902. (-1) 
  3903.  chartype%(F%) 
  3904. %      
  3905.  36,39:printorder$+=field$
  3906.        
  3907. :printorder$+=sfield$
  3908.         
  3909.  printorder$+=field$
  3910. enable_row(calcrow%?Fieldnumber%,
  3911. lit(printM%,7,
  3912. lit(printM%,8,
  3913. lit(mainM%,7,
  3914. selected(passW%,13))
  3915. $    P%=
  3916. printorder$,field$,P%+1)
  3917.  ((P%-1) 
  3918.  2)=0 
  3919.  P%=0
  3920.  P%>0 
  3921. 9    printorder$=
  3922. printorder$,P%-1)+
  3923. printorder$,P%+2)
  3924. ,    
  3925. enable_row(calcrow%?Fieldnumber%,
  3926.         
  3927.         
  3928. )      SP%=
  3929. printorder$,sfield$,SP%+1)
  3930. !    
  3931.  ((SP%-1) 
  3932.  2)=0 
  3933.  SP%=0
  3934.  SP%>0 
  3935. =      printorder$=
  3936. printorder$,SP%-1)+
  3937. printorder$,SP%+2)
  3938. .      
  3939. enable_row(calcrow%?Fieldnumber%,
  3940.         
  3941.  printorder$="" 
  3942. lit(printM%,7,
  3943. lit(printM%,8,
  3944. lit(mainM%,7,
  3945. shade(matchW%,7,printorder$<>"")
  3946. lit(printM%,9,printorder$<>"")
  3947. print_click(wi%,wi2%,ic%,b%)
  3948.  d$,fg%,bg%,colour%,z%
  3949. b%=(b% 
  3950.  %111)
  3951. selected(wi%,26) 
  3952. show_menu(wi2%,x%-500,y%+200)
  3953.  1,4:
  3954.  b%=4 
  3955.  z%=1 
  3956.  z%=-1
  3957.  ic% 
  3958. 5    
  3959.  15,16:
  3960. deselect(wi2%,
  3961. selected_esg(wi2%,2))
  3962. #    
  3963.  22,23,25:
  3964. set_dest_sprite
  3965. '    
  3966.  ic%<>25 
  3967. close_window(wi2%)
  3968. -    
  3969. deselect(wi2%,
  3970. selected_esg(wi2%,2))
  3971. 3    
  3972. selected_esg(wi%,3)=-1 
  3973. select(wi%,15)
  3974.  40,41:
  3975. (    
  3976. shade(wi%,43,
  3977. selected(wi%,40))
  3978. (    
  3979. shade(wi%,51,
  3980. selected(wi%,40))
  3981.     $
  3982. text(wi2%,0)=pdriver$
  3983. *    
  3984. position_window(wi2%,0,0,0,0,0,0)
  3985. /    
  3986. (-1) 
  3987.  d$="Initial" 
  3988.  d$="Resources"
  3989. K    
  3990. get_options(wi%,wi2%,"<Pbase$Dir>."+d$+".!PrintOpts"):
  3991. redraw(wi%)
  3992. P    
  3993.  b%=4 
  3994. close_window(wi%):
  3995. restore_caret(returnto%) 
  3996. match(0,0)
  3997. 4    
  3998. restore_window(wi%,remember%+winbuff%(3,1))
  3999. L    
  4000.  b%=4 
  4001. close_window(wi%):
  4002. restore_caret(returnto%) 
  4003. redraw(wi%)
  4004. selected(wi%,31) 
  4005. D      
  4006. save_options(wi%,wi2%,"<Pbase$Dir>.Resources.!PrintOpts")
  4007.       
  4008. C      
  4009.  prtopts$="" 
  4010.  prtopts$=$database%+".PrintRes.PrintOpts"
  4011.       $SaveName%=prtopts$
  4012. 3      $SaveSprite%="sfile_7f5;Pptr_hand,4,0;R2"
  4013. ,      $
  4014. text(saveW%,4)="Default options"
  4015. 6      
  4016. shade(saveW%,4,
  4017. deselect(saveW%,4)      
  4018. "      savefunc$="Save options"
  4019. %      
  4020. show_menu(saveW%,x%-64,y%)
  4021.         
  4022.  53,54,55:
  4023. I    colour%=
  4024. get_icon_cols(wi%,ic%):fg%=colour% 
  4025.  16:bg%=colour% 
  4026.     fg%=(fg%+z%+16) 
  4027. >    colour%=fg%+bg%*16:
  4028. set_icon_cols(wi%,ic%,colour%)    
  4029. enable_print_setup(wi%,wi2%)
  4030. set_dest_sprite
  4031.  Z$,sprite$,wi%
  4032. wi%=printW%
  4033. selected_esg(wi%,4) 
  4034.  22:sprite$="Swin2"
  4035.  23:sprite$="Ssmall_fff"
  4036.  25:sprite$="Sprinter"
  4037. val(matchW%,11)=sprite$+";R2"
  4038. redraw_icon(matchW%,11)
  4039. shade(wi%,42,
  4040. selected(wi%,25))
  4041. selected(wi%,25) 
  4042. shade(matchW%,11,
  4043. printer_driver(Z$))
  4044. shade(matchW%,11,
  4045. printer_driver(
  4046.  driver$)
  4047.  xres%,yres%
  4048. :driver$=
  4049. msg("Err180"):=
  4050.  "PDriver_Info" 
  4051.  ,xres%,yres%,,driver$
  4052. (driver$+=" "+
  4053. (xres%)+" x "+
  4054. (yres%)
  4055. printer_click(wi%,wi2%,ic%,b%)
  4056.  copies%,z%
  4057. b%=(b% 
  4058.  %111)
  4059.  1,4:
  4060.  b%=4 
  4061.  z%=1 
  4062.  z%=-1
  4063.  ic% 
  4064. !    
  4065.  38,48,77:
  4066. convert_units
  4067. 1    
  4068.  7,8:
  4069. deselect(wi%,
  4070. selected_esg(wi%,3))
  4071. H    
  4072.  ic%=8 
  4073. deselect(wi2%,
  4074. selected_esg(wi2%,9)):
  4075. select(wi2%,80)
  4076. g    
  4077. restore_window(wi2%,remember%+winbuff%(2,1)):
  4078.  b%=4 
  4079. close_window(wi2%) 
  4080. redraw(wi2%)
  4081. )    
  4082.  b%=4 
  4083. close_window(wi2%)
  4084.  44,47:
  4085. "    copies%=
  4086. text(wi2%,45))
  4087. ,    
  4088.  ic%=47 
  4089.  copies%+=z% 
  4090.  copies%-=z%
  4091. -    
  4092.  copies%=0 
  4093.  copies%=100 
  4094.  copies%=1
  4095. "    $
  4096. text(wi2%,45)=
  4097. (copies%)
  4098. redraw_icon(wi2%,45)
  4099.  59,72:
  4100. >    
  4101.  "Font_ListFonts",,0,(1<<19),,0 
  4102.  ,,,size%,,indsize%
  4103.  DAfontmenu%=0 
  4104. L      DAfontmenu%=
  4105. create_dynamic_area(size%+indsize%,"Pbase font menu")
  4106. 3      
  4107. claim_page(size%+indsize%,DAfontmenu%)
  4108.         
  4109.     fontM%=DAfontmenu%
  4110. G    
  4111.  "Font_ListFonts",,fontM%,(1<<19),size%,fontM%+size%,indsize%
  4112. *    
  4113. show_pop_up_menu(fontM%,wi2%,ic%)
  4114. "    
  4115.  ic%=59 
  4116.  fontdisplay%=57
  4117. "    
  4118.  ic%=72 
  4119.  fontdisplay%=71
  4120. B    
  4121.  61,62,63,64,84:
  4122. shade(wi2%,65,(
  4123. selected_esg(wi2%,7)<0))
  4124. enable_print_setup(wi%,wi2%)
  4125. enable_print_setup(wi%,wi2%)
  4126. live%()=42,-1:
  4127.  'Lots more'
  4128. enable(wi%,
  4129. selected(wi%,25)):
  4130.  Printer dest
  4131. selected_esg(wi%,3)=-1 
  4132. selected_esg(wi2%,2)=-1 
  4133. select(wi%,15)
  4134. selected(wi%,16) 
  4135. selected(wi2%,8) 
  4136. deselect(wi%,46)
  4137. %$live%()=46,-1:
  4138.  Enable 'Sort on'
  4139. enable(wi%,
  4140. selected(wi%,15) 
  4141. selected(wi2%,7)):
  4142.  Horiz or Table
  4143. '-live%()=44,47,-1:
  4144.  Sort field & direction
  4145. enable(wi%,
  4146. selected(wi%,46)):
  4147.  Sort on switch set
  4148. )9live%()=43,51,-1:
  4149.  Shrink row switch & Row terminator
  4150. enable(wi%,
  4151. selected(wi%,40)):
  4152.  Single row format set
  4153. ++live%()=65,-1:
  4154.  User-defined point-size
  4155. enable(wi2%,
  4156. selected_esg(wi2%,7)=-1):
  4157.  No fixed size selected
  4158. -&live%()=68,-1:
  4159.  Margins as printer
  4160. enable(wi2%,
  4161. printer_driver(pdriver$))
  4162. /$live%()=14,15,16,18,-1:
  4163.  Margins
  4164. enable(wi2%,
  4165. selected(wi2%,68))
  4166. 1>live%()=23,24,69,-1:
  4167.  Enable extra cols, width, extra rows
  4168. enable(wi2%,
  4169. selected(wi2%,7)):
  4170.  Table
  4171. 32live%()=80,81,85,86,-1:
  4172.  Disable print-columns
  4173. enable(wi2%,
  4174. selected(wi2%,8)):
  4175.  Label
  4176. live%()=82,-1:
  4177.  Gutter
  4178. enable(wi2%,
  4179. selected_esg(wi2%,9)>80):
  4180.  2,3 or 4 cols selected
  4181. 72live%()=28,29,30,31,32,34,39,41,51,52,53,55,-1
  4182. enable(wi2%,
  4183. selected(wi2%,8)):
  4184.  Enable special label settings
  4185. 93live%()=40,78,-1:
  4186.  Enable substitution on label
  4187. selected(wi2%,8) 
  4188. deselect(wi2%,39)
  4189. enable(wi2%,
  4190. selected(wi2%,8) 
  4191. selected(wi2%,39)):
  4192.  Subst.switch set
  4193. keypad_click(wi%,ic%,b%)
  4194.  handle%,icon%,T%,flag%,N$,date$,retry%
  4195. validate(Fieldnumber%,T%,N$)=
  4196. A(changed%=
  4197. update_calcs(Fieldnumber%)
  4198.  ic%<>1 
  4199.  HasTitle%=1 
  4200. close_window(titleW%):HasTitle%=2 
  4201.  ic% 
  4202.  18,20,21:flag%=
  4203.  Allow table listing & scratchpad operations
  4204. :flag%=
  4205. check_record
  4206.  retry% 
  4207.  flag% 
  4208. deselect(wi%,22):Filter$="TRUE":
  4209. close_window(relateW%)
  4210.  flash% 
  4211. set_icon(mainW%,field%(flash%),state%):flash%=
  4212. b%=(b% 
  4213.  %111)
  4214. fkey_status(ic%)
  4215.  1,4:
  4216.  b%=4 
  4217.  z%=1 
  4218.  z%=-1
  4219.  ic% 
  4220. Q6    
  4221.  merging% 
  4222. scan(z%,
  4223. text(wi%,23)))
  4224.  b%=1 
  4225. T:      
  4226.  HasTitle%=2 
  4227.  HasTitle%=1:
  4228. open_window(mainW%)
  4229.       
  4230.  stop%=
  4231. V        
  4232. W%    
  4233.  2:addr=
  4234. moveto(key%,top,z%)
  4235. X&    
  4236.  3:addr=
  4237. moveto(key%,top,-z%)
  4238. Y&    
  4239.  4:addr=
  4240. moveto(key%,addr,z%)
  4241. Z'    
  4242.  5:addr=
  4243. moveto(key%,addr,-z%)
  4244. [(    
  4245.  6:addr=
  4246. fast_wind(top,addr,z%)
  4247. \)    
  4248.  7:addr=
  4249. fast_wind(top,addr,-z%)
  4250. key_select(z%)
  4251. key_select(-z%)
  4252. subfile(z%)
  4253. subfile(-z%)
  4254. a-    
  4255. rotate:addr=
  4256. moveto(key%,top,1)
  4257. b"    
  4258. allow_search(wi%,z%)
  4259. c<    
  4260.  b%=4 
  4261. display(key%,-1) 
  4262. display(key%,-2) 
  4263. d#    
  4264.  15:addr=
  4265. shift(z%,key%,0)
  4266. (-1) 
  4267. f!      filemem%(file%,key%)=-1
  4268. g(      addr=
  4269. find("#"+
  4270. (REC%),key%,
  4271.       
  4272. display(key%,addr)
  4273. i        
  4274. j$    
  4275.  16:addr=
  4276. shift(-z%,key%,0)
  4277. (-1) 
  4278. l!      filemem%(file%,key%)=-1
  4279. m(      addr=
  4280. find("#"+
  4281. (REC%),key%,
  4282.       
  4283. display(key%,addr)
  4284. o        
  4285. p6    
  4286.  17:addr=
  4287. shift(0,key%,1):
  4288. display(key%,addr)
  4289. val_help
  4290. save_everything
  4291. store
  4292. t#    
  4293. retrieve(scratchpad$)
  4294. u/    
  4295. filter(wi%,b%,
  4296. selected(wi%,ic%))
  4297.  24,25,26,27:
  4298. x       
  4299. text(wi%,ic%)=""
  4300.       
  4301.       R$=$
  4302. text(wi%,ic%)
  4303. {G      
  4304.  R$="" 
  4305. text(wi%,ic%)=
  4306. (REC%) 
  4307.  addr=
  4308. find("#"+R$,key%,
  4309. |        
  4310. redraw_icon(wi%,ic%)
  4311. ~=    
  4312.  customise% 
  4313. (libfunc$+"_button(wi%,ic%,b%)")
  4314. fkey_status(ic%)
  4315.  Modify% 
  4316.  keynumber%
  4317.  ic%>=0 
  4318.  ic%<23 
  4319.   kpad%=ic%
  4320.  ic%=22 
  4321.  $Kpadicon%="Soptoff;r5,14" 
  4322.  $Kpadicon%=$
  4323. val(keypadW%,ic%)
  4324.   $FkeyTitle%=vname$(ic%+9)
  4325. $  keynumber%=buttonfield%(1,ic%)
  4326.  keynumber%>0 
  4327. -    $Fkeyequiv%="F"+
  4328. (keynumber% 
  4329.  %1111)
  4330. /    
  4331. set_icon(fkeyW%,1,(keynumber% 
  4332.  1<<4))
  4333. /    
  4334. set_icon(fkeyW%,2,(keynumber% 
  4335.  1<<5))
  4336.         
  4337.     $
  4338. text(fkeyW%,3)="None"
  4339. deselect(fkeyW%,1)
  4340. deselect(fkeyW%,2)
  4341. lit(keystrokeM%,0,
  4342. lit(keystrokeM%,0,
  4343. show_menu(keystrokeM%,x%-64,y%)
  4344. load_functionkeys
  4345.  F,I%,d$
  4346. buttonfield%()=0
  4347. (-1) 
  4348.  d$="Initial" 
  4349.  d$="Resources"
  4350. ("<Pbase$Dir>."+d$+".Fkeys")
  4351.   buttonfield%(1,I%)=
  4352.   I%+=1
  4353. close_file(F)
  4354. save_fkeys
  4355.  F,I%
  4356. ("<Pbase$Dir>.Resources.Fkeys")
  4357.  I%=0 
  4358. (buttonfield%(1,I%))
  4359. close_file(F)
  4360. list_fkeys
  4361.  I%,K%,pad%,F,K$,S$
  4362. print_init("W")
  4363. @TextName$=$database%+".PrintJobs.Fkeys":$SaveName%=TextName$
  4364. format$="keys"
  4365. spacer$,"|")>0 
  4366.  spacer$="|"
  4367. ,LenLine%=Lmargin%+39:Tab%(2)=Lmargin%+30
  4368. 8maxhead%=0:fspace%=18:hspace%=3*36-18:PrintFields%=2
  4369. send_title("Keystroke equivalents")
  4370.  "Hourglass_On"
  4371.  I%=0 
  4372.   K%=buttonfield%(1,I%)
  4373.  K%=0 
  4374.     K$="None"
  4375.         
  4376.     K$="F"+
  4377.  %1111)
  4378.     pad%=2
  4379. .    
  4380.  (K% 
  4381.  (1<<4)) 
  4382. (139)+K$:pad%-=1
  4383. +    
  4384.  (K% 
  4385.  (1<<5)) 
  4386.  K$="^"+K$:pad%-=1
  4387. store_string(vname$(I%+9),Lmargin%,
  4388. store_string(K$,Tab%(2)+pad%,
  4389. ,    
  4390.  13:S$=vname$(I%+9)+" all subfiles"
  4391. '    
  4392.  14:S$="Copy displayed record"
  4393. (    
  4394.  18:S$="Turn validation ON/OFF"
  4395. :S$=""
  4396.  S$<>"" 
  4397. $    
  4398. store_string(S$,Lmargin%,
  4399. ,    
  4400. store_string(
  4401. (139)+K$,Tab%(2)+1,
  4402. ("<Pbase$Dir>.Resources.KeyList")
  4403. store_string(
  4404. #F,Lmargin%,
  4405. close_file(F)
  4406.  "Hourglass_Off"
  4407. screen_list
  4408. write_log(-1,"Keystroke equivalents printed","")
  4409. scan(z%,s%)
  4410. stop%=
  4411.    addr=
  4412. moveto(key%,addr,z%)
  4413.   K%=
  4414. complete(4)
  4415.  stop%
  4416. store
  4417.  wi%,ic%
  4418.  printorder$<>"" 
  4419. (-1) 
  4420. to_clipboard
  4421.  "Wimp_GetCaretPosition",,block%
  4422.   wi%=!block%:ic%=block%!4
  4423. !  scratchpad$=$
  4424. text(wi%,ic%)
  4425. to_clipboard
  4426.  I%,L%,P%,len%,S$,b$
  4427. NSHsaveptr%=
  4428. extend_named_sliding_block(saveanchor%,SHclaim%):P%=SHsaveptr%
  4429. clear_mem(SHsaveptr%,0,
  4430. sliding_block_size(saveanchor%))
  4431.  I%=1 
  4432.  printorder$ 
  4433. (  F$=
  4434. printorder$,I%,2):F%=
  4435. ("&"+F$)
  4436.  chartype%(F%) 
  4437. k    
  4438.  0,1,2,3,4,5,6,7,8,46,47,48,49,50,51,52,53,54,55,56,57,58,63,68,69,70,71,72,73,74,75,76,77,78,79: 
  4439.     S$=$Rf%(F%):L%+=
  4440. (S$)+1
  4441. 0    SHsaveptr%=
  4442. claim_page(saveanchor%,L%+1)
  4443.     $P%=S$:P%+=
  4444. (S$)+1
  4445.  36,39:
  4446. 3    len%=
  4447. blob_path(
  4448. ,$database%,REC%,F%,39,b$)
  4449.  len%>0 
  4450.       L%+=len%
  4451. 2      SHsaveptr%=
  4452. claim_page(saveanchor%,L%+1)
  4453.        
  4454.  "OS_File",255,b$,P%
  4455.       P%+=len%+1
  4456.         
  4457.  41,42,43,61,62:
  4458. %    S$=$Rf%(F%):Z%=
  4459. no_yes(F%,S$)
  4460.     L%+=
  4461. (S$)+1
  4462. 0    SHsaveptr%=
  4463. claim_page(saveanchor%,L%+1)
  4464.     $P%=S$:P%+=
  4465. (S$)+1
  4466. @Start%=SHsaveptr%:End%=Start%+L%:datasize%=L%:ramptr%=Start%
  4467.  clip% 
  4468. -  block%!0=24:block%!16=15:block%!20=%100
  4469.  "Wimp_SendMessage",17,block%,0
  4470. #  clip%=
  4471. :savefunc$="Clipboard"
  4472. retrieve(S$)
  4473. (-1) 
  4474. request_clipped
  4475.  wi%,ic%,L%
  4476.  "Wimp_GetCaretPosition",,block%
  4477.   wi%=!block%:ic%=block%!4
  4478.  scratchpad$<>"" 
  4479. "    L%=
  4480. buffer_length(wi%,ic%)
  4481.     $
  4482. text(wi%,ic%)=
  4483. S$,L%)
  4484. C    
  4485.  F$(Fieldnumber%)<>"" 
  4486. text(wi%,ic%)=F$(Fieldnumber%)
  4487. redraw_icon(wi%,ic%)
  4488. set_caret(0,wi%,ic%)
  4489.  vtype$(chartype%(Fieldnumber%))="L" 
  4490.  ScrollChanged%=
  4491. request_clipped
  4492. &(!block%=256:block%!12=0:block%!16=16
  4493. ' block%!20=mainW%:block%!24=1
  4494. (Fblock%!28=0:block%!32=0:block%!36=%100:block%!40=&fff:block%!44=-1
  4495.  "Wimp_SendMessage",18,block%,0:
  4496.  Broadcast DataRequest
  4497. my_ref%=block%!8:pasting%=
  4498. from_clipboard(f$)
  4499.  wi%,ic%,F%,L%,S$
  4500.  "Wimp_GetCaretPosition",,block%
  4501. wi%=block%!0:ic%=block%!4
  4502.   S$=
  4503.  wi% 
  4504. 5#    
  4505.  mainW%:F%=
  4506. get_field(ic%)
  4507.  chartype%(F%) 
  4508.       
  4509.  0,1,2,3,4,5,8,63:
  4510. 8=      $
  4511. text(wi%,ic%)=
  4512. S$,len%(F%)):
  4513. redraw_icon(wi%,ic%)
  4514. 9        
  4515.     F%+=1:ic%=field%(F%)
  4516. ;     
  4517.  tableW%(Tablenumber%):
  4518. <"    L%=
  4519. buffer_length(wi%,ic%)
  4520. =5    $
  4521. text(wi%,ic%)=
  4522. S$,L%):
  4523. redraw_icon(wi%,ic%)
  4524.     ic%+=1
  4525. close_file(F)
  4526. B-block%!0=20:block%!12=my_ref%:block%!16=4
  4527.  "Wimp_SendMessage",17,block%
  4528. pasting%=
  4529.  ### Binary Large Objects (B.L.O.B.s) ###
  4530. blob_path(create%,f$,R%,F%,V%,
  4531.  O$,main$,level1$,level2$,d%,dn%,do%,L%,bn$,bo$
  4532.  R%<0 
  4533. softerror("",164):=-1
  4534.  36,39:main$=f$+"."+Tag$(F%)+"text"
  4535.  37,40:main$=f$+"."+Tag$(F%)+"sprite"
  4536.  38:main$=f$+"."+Tag$(F%)+"draw"
  4537.  64,65,66,67:main$=f$+"."+Tag$(F%)+"scroll"
  4538. R"level1$=main$+"."+
  4539.  4900)
  4540. S"level2$=level1$+"."+
  4541. TTbn$=level2$+".Rec"+
  4542. (R%):
  4543.  "OS_File",5,bn$ 
  4544.  dn%,,,,Ln%:
  4545.  dn%=1 
  4546.  d%=dn%:L%=Ln%
  4547. UVbo$=level2$+"."+
  4548.  70):
  4549.  "OS_File",5,bo$ 
  4550.  do%,,,,Lo%:
  4551.  do%=1 
  4552.  d%=do%:L%=Lo%
  4553.  objname$ 
  4554.  "NEW":b$=bn$:
  4555.  do%=1 
  4556.  dn%=0 
  4557.  "OS_CLI","Rename "+bo$+" "+bn$
  4558.  "OLD":b$=bo$:
  4559.  dn%=1 
  4560.  do%=0 
  4561.  "OS_CLI","Rename "+bn$+" "+bo$
  4562.  d%=0 
  4563.  create%=
  4564.  "OS_File",8,main$
  4565.  "OS_File",8,level1$
  4566.  "OS_File",8,level2$
  4567.  d%=1 
  4568. load_blob(f$,R%,F%,V%)
  4569.  L%,b$
  4570. c#L%=
  4571. blob_path(
  4572. ,f$,R%,F%,V%,b$)
  4573.  L%>=0 
  4574. e;  SHmisc%=
  4575. extend_named_sliding_block(tempanchor%,L%+1)
  4576.  "OS_File",255,b$,SHmisc%
  4577. blob_to_file(F,L%)
  4578.  Used only to transfer CSV fields to external files
  4579.  L%>0 
  4580.  "OS_GBPB",2,F,SHmisc%,L%
  4581. copy_blob(source$,dest$,RS%,RD%,F%,V%)
  4582.  L%,Z%,bs$,bd$
  4583. q*L%=
  4584. blob_path(
  4585. ,source$,RS%,F%,V%,bs$)
  4586.  L%>0 
  4587. s*  Z%=
  4588. blob_path(
  4589. ,dest$,RD%,F%,V%,bd$)
  4590.  "OS_CLI","Copy "+bs$+" "+bd$+" ~C~V~Q"
  4591. delete_blob(F%,F$,wi%,ic%)
  4592.  flag%,f$,object$
  4593. selected(prefsW%,20) 
  4594. confirm(
  4595. msg("Err115,"+$RemoveOb%)) 
  4596. |(    
  4597.  "OS_CLI","Delete "+F$:flag%=
  4598.  "OS_CLI","Delete "+F$:flag%=
  4599.  flag% 
  4600.  chartype%(F%) 
  4601. 6    
  4602.  36:$
  4603. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssm!edit"
  4604. 7    
  4605.  37:$
  4606. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssm!paint"
  4607. 6    
  4608.  38:$
  4609. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssm!draw"
  4610.  39:$
  4611. text(wi%,ic%)=""
  4612. #    
  4613. show_picture(F%,REC%)
  4614.  64,65,66,67:
  4615. /    
  4616. get_scroller(REC%,F%,chartype%(F%)-63)
  4617. redraw_icon(wi%,ic%)
  4618. asterisk(
  4619. set_blob_sprite(R%,F%,V%,
  4620.  L%,sprite$
  4621.  R%=RA% 
  4622.  L%=-1 
  4623. blob_path(
  4624. ,$database%,R%,F%,V%,b$)
  4625.  L%>=0 
  4626.  sprite$="small_fff" 
  4627.  sprite$="sm!edit"
  4628.  L%>=0 
  4629.  sprite$="small_ff9" 
  4630.  sprite$="sm!paint"
  4631.  L%>=0 
  4632.  sprite$="small_aff" 
  4633.  sprite$="sm!draw"
  4634. val(mainW%,field%(F%))="R5;Pptr_ext,8,4;S"+sprite$
  4635. redraw_icon(mainW%,field%(F%))
  4636. edit_blob(F%,V%)
  4637.  wi%,ic%,b$,O$,val$,F
  4638.  "Wimp_GetCaretPosition",,block%:returnto%=block%!4
  4639. wi%=mainW%:ic%=field%(F%)
  4640.  36:O$="Text":val$="R5;Pptr_ext,8,4;Ssmall_fff":ftype%=&fff:OLE%=F%
  4641.  37:O$="Sprite":val$="R5;Pptr_ext,8,4;Ssmall_ff9":ftype%=&ff9:OLE%=F%
  4642.  38:O$="Draw":val$="R5;Pptr_ext,8,4;Ssmall_aff":ftype%=&aff:OLE%=F%
  4643.  39:O$="Text":val$="L;Pptr_ext,8,4":ftype%=&fff:OLE%=F%
  4644.  40:O$="Sprite":val$="Z0;Pptr_ext,8,4;Ssmall_ff9":ftype%=&ff9:OLE%=F%
  4645. blob_path(
  4646. ,$database%,REC%,F%,V%,b$)<0 
  4647.  V%<>40 
  4648. val(wi%,ic%)=val$
  4649.  "OS_CLI","Copy <PBase$Dir>.Resources.Objects."+O$+" "+b$+" ~C~V"
  4650.  V%=36 
  4651. (b$):
  4652. #F,"Record "+
  4653. (REC%)+": "+$Rf%(KF%(0,0)):
  4654. close_file(F)
  4655. redraw_icon(wi%,ic%)
  4656.  OLE%>0 
  4657.  OLE$=b$:
  4658.  "OS_File",5,b$ 
  4659.  ,,,OLEDS%
  4660.  "OS_CLI","Filer_Run "+b$
  4661. transfer_blob(wi%,ic%,file$,d%,ft%)
  4662.  F%,V%,L%,W%,f$,b$,ok%,list$,c$,name%
  4663.  wi%<>mainW% 
  4664.  Access%=
  4665. #F%=(ic%+1) 
  4666.  2:V%=chartype%(F%)
  4667. "name%=
  4668. text(mainW%,field%(F%))
  4669.  60:f$=
  4670. compare_paths(file$,$database%)
  4671. (f$)<=len%(F%) 
  4672.     $Rf%(F%)=f$   
  4673. -    Z%=
  4674. set_remote_sprite(F%,file$):ok%=
  4675. /    
  4676. softerror(file$+","+
  4677. (len%(F%)),154)
  4678.  ft%=-1 
  4679. .    file$=
  4680. compare_paths(file$,$database%)
  4681. -    link$(F%)="@"+file$:link$(0)="LOADED"
  4682. &    $
  4683. val(wi%,ic%)="R5;Sdirectory"
  4684. 5    
  4685.  WithLeaf% 
  4686.  $name%=
  4687. leaf(file$) 
  4688.  $name%=""
  4689.     ok%=
  4690.  ft%<>-1 
  4691. .    file$=
  4692. compare_paths(file$,$database%)
  4693. -    link$(F%)="@"+file$:link$(0)="LOADED"
  4694. *    $
  4695. val(wi%,ic%)="R5;Sfile_"+
  4696. ~(ft%)
  4697. 5    
  4698.  WithLeaf% 
  4699.  $name%=
  4700. leaf(file$) 
  4701.  $name%=""
  4702.     ok%=
  4703.  ft%=&fff 
  4704. install_blob:$
  4705. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssmall_fff":ok%=
  4706.  ft%=&ff9 
  4707. install_blob:$
  4708. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssmall_ff9":ok%=
  4709.  ft%=&aff 
  4710. install_blob:$
  4711. val(wi%,ic%)="R5;Pptr_ext,8,4;Ssmall_aff":ok%=
  4712.  ft%=&fff 
  4713. install_blob:
  4714. show_text_block(F%,REC%):ok%=
  4715.  ft%=&ff9 
  4716. install_blob:
  4717. show_picture(F%,REC%):ok%=
  4718.  ok% 
  4719. redraw_icon(wi%,ic%):
  4720. asterisk(
  4721. install_blob
  4722. blob_path(
  4723. ,$database%,REC%,F%,V%,b$)
  4724.  "OS_CLI","Remove "+b$
  4725.  "OS_CLI","Copy "+file$+" "+b$+" ~C~V"
  4726. show_text_block(F%,REC%)
  4727.  F,b$,I%,len%,base%
  4728.  F%=0 
  4729. base%=Rf%(F%)
  4730. /len%=
  4731. blob_path(
  4732. ,$database%,REC%,F%,39,b$)
  4733.  len%>0 
  4734.  len%>len%(F%) 
  4735.  len%=len%(F%)
  4736.  ### Load only as much of file as we can display ###
  4737. @  F=
  4738. (b$):
  4739.  F>0 
  4740.  "OS_GBPB",4,F,base%,len%:
  4741. close_file(F)
  4742.  ### Replace any characters<32 by spaces - but ONLY for display ###
  4743.  I%=0 
  4744.  len%-1
  4745. #    
  4746.  base%?I%<32 
  4747.  base%?I%=32
  4748.   base%?len%=10
  4749.  $base%=""
  4750. show_picture(F%,REC%)
  4751.  F,f$,I%,max%,len%,x%,y%,w%,h%,base%
  4752.  F%=0 
  4753. /len%=
  4754. blob_path(
  4755. ,$database%,REC%,F%,40,f$)
  4756. E!block%=mainW%:block%!4=field%(F%):
  4757.  "Wimp_GetIconState",,block%
  4758. <x%=block%!8:y%=block%!12:w%=block%!16-x%:h%=block%!20-y%
  4759.  "Wimp_DeleteIcon",,block%
  4760.  len%>=0 
  4761. 7  base%=
  4762. extend_named_sliding_block(Rf%(F%),len%+4)
  4763. /  !base%=len%+4:
  4764.  "OS_File",255,f$,base%+4
  4765. Q  field%(F%)=
  4766. create_icon(0,mainW%,x%,y%,w%,h%,&0700A53E,"",base%+16,base%,0)
  4767.  base% points to sprite area, base%+16 to sprite itself
  4768. K  field%(F%)=
  4769. create_icon(0,mainW%,x%,y%,w%,h%,&0700A53E,"",paint%,1,8)
  4770.  paint% points to sprite name (File_ff9),1 means wimp pool,8 is name length
  4771. get_remote_file(field%)
  4772.  f$,err%
  4773. filename($Rf%(field%),"PrintRes",-1)
  4774.  f$<>"" 
  4775.  "XOS_File",5,f$ 
  4776.  d%;err%
  4777.  (err% 
  4778.  1)=1 
  4779. 5    
  4780. softerror(f$+","+
  4781. leaf(f$)+","+Tag$(F%),121)
  4782. .    
  4783.  d%>0 
  4784.  "OS_CLI","Filer_Run "+f$
  4785. set_remote_sprite(field%,f$)
  4786.  d%,type%,err%,wi%,ic%,sprite$
  4787. !wi%=mainW%:ic%=field%(field%)
  4788.  f$="" 
  4789.  d%=-1 
  4790.  "XOS_File",5,f$ 
  4791.  d%,,type%;err%
  4792.  (err% 
  4793.  1)=1 
  4794. softerror(f$+","+
  4795. leaf(f$)+","+Tag$(field%),121):d%=0
  4796.  0:sprite$="whatsit":
  4797.  Filename present but file not found
  4798. -1:sprite$="dropfile":
  4799.  No filename in field
  4800.  1:type%=(type%>>8) 
  4801.  &fff:sprite$="file_"+
  4802. ~(type%)
  4803.   c$=
  4804. leaf(f$),1)
  4805.  c$="!" 
  4806.  sprite$="application" 
  4807.  sprite$="directory"
  4808. val(wi%,ic%)="R5;Pptr_ext,8,4;S"+sprite$
  4809. redraw_icon(wi%,ic%)
  4810. filter(wi%,b%,on%)
  4811.  x%,y%,vxmin%,vymax%,scrollx%,scrolly%
  4812.  b%=1 
  4813.  on%=
  4814.  on%=
  4815.  b%=4
  4816. filter%=on%:finished%=
  4817. '>matched%=0:$
  4818. text(filterW%,5)="0":
  4819. redraw_icon(filterW%,5)
  4820.  on% 
  4821.  wi% 
  4822.  keypadW%:
  4823. ,4    !block%=wi%:
  4824.  "Wimp_GetWindowState",,block%
  4825. -=    
  4826. position_window(filterW%,block%!12,block%!8,0,0,0,0)
  4827. .A    
  4828.  mainW%:
  4829. open_at(firstfilter%,filterW%,22,482,316,44,44)
  4830.  b%=1 
  4831.  $Query%=query$
  4832. set_caret(0,queryW%,0)
  4833. 3B  Filter$="TRUE":
  4834. close_it(filterW%):
  4835. restore_caret(returnto%)
  4836. set_icon(keypadW%,22,on%)
  4837.  field%(buttonfield%(0,22))>0 
  4838. set_icon(mainW%,field%(buttonfield%(0,22)),on%)
  4839. fast_wind(T%,P%,D%)
  4840. ; fast%=
  4841. text(keypadW%,23))
  4842. D%=(D%+1) 
  4843.  P%<>T% 
  4844.  I%<fast%
  4845.  filter% 
  4846. next_match(P%,D%,Filter$,Z%) 
  4847. neighbour(key%,P%,D%)
  4848.   I%+=1
  4849.  P%=T% 
  4850.  filter% 
  4851.  7:P%=
  4852. neighbour(key%,P%,1-D%)
  4853.  merging% 
  4854. merge_next(filter%,key%,P%) 
  4855. display(key%,P%)
  4856. subfile(direction%)
  4857. file%+=direction%
  4858.  file%=6 
  4859.  file%=0
  4860.  file%=-1 
  4861.  file%=5
  4862. set_subfile(file%)
  4863.  filemem%(file%,key%)>=0 
  4864. K3  addr=filemem%(file%,key%):
  4865. display(key%,addr)
  4866.  addr=
  4867. moveto(key%,top,1)
  4868. set_subfile(fi%)
  4869. top=8*fi%+LH%
  4870. S $Subfilename%=$Subfile%(fi%)
  4871.  ic%=6 
  4872. deselect(queryW%,ic%)
  4873. select(queryW%,fi%+6)
  4874. save_subfilenames
  4875.  present%=7 
  4876. ]!  F=
  4877. ($database%+".Subfiles")
  4878.  I%=0 
  4879. #F,$Subfile%(I%)
  4880. close_file(F)
  4881. allow_search(wi%,e%)
  4882. select(searchW%,5):
  4883. deselect(searchW%,6)
  4884. select(searchW%,6):
  4885. deselect(searchW%,5)
  4886. text(searchW%,1)="":
  4887. redraw_icon(searchW%,1)
  4888. text(searchW%,7)="":
  4889. redraw_icon(searchW%,7)
  4890. text(searchW%,3)=Index$(key%)
  4891.  wi% 
  4892.  keypadW%:
  4893. o7  !block%=keypadW%:
  4894.  "Wimp_GetWindowState",,block%
  4895. position_window(searchW%,block%!12,block%!8,0,0,0,0)
  4896.  mainW%:
  4897. open_at(firstsearch%,searchW%,13,456,316,114,52)
  4898. set_caret(0,searchW%,1)
  4899. val_help
  4900.  name$,subst%,field%,extra%,fld%,scrcol%
  4901.  "Wimp_GetCaretPosition",,block%
  4902. wi%=block%!0:ic%=block%!4
  4903. scroller_num2(wi%)
  4904.  wi% 
  4905.  mainW%:fld%=(ic%+1) 
  4906.  scrollerW%(S%):fld%=scrolldata%(S%,0)
  4907.  fld%>0 
  4908.   name$=link$(fld%)
  4909. +  field%=
  4910. trailing_number(name$,exact%)
  4911. +  subst%=
  4912. leading_number(scrcol%,name$)
  4913. '  Tablenumber%=
  4914. table_number(name$)
  4915.  Tablenumber%<>-1 
  4916. show_table(Tablenumber%,0,0) 
  4917.  Tablenumber%=0
  4918. val_on_off(on%)
  4919.  I%=1 
  4920.  on% 
  4921. $    
  4922. :$valid%(I%)=$rvalid%(I%)
  4923. (    
  4924. :$valid%(I%)="Pptr_write,4,4"
  4925. save_click(wi%,ic%,b%)
  4926.  f$,p$,H$
  4927. butt%=(b% 
  4928.  %111)
  4929.  ic%=4 
  4930. text(wi%,ic%) 
  4931.  "Default selection":
  4932. y    
  4933. selected(wi%,ic%) 
  4934.  $SaveName%=$database%+".PrintRes.!Selection" 
  4935.  $SaveName%=$database%+".PrintRes.Selection"
  4936.  "Default query":
  4937. q    
  4938. selected(wi%,ic%) 
  4939.  $SaveName%=$database%+".PrintRes.!Query" 
  4940.  $SaveName%=$database%+".PrintRes.Query"
  4941.  "Default options":
  4942. y    
  4943. selected(wi%,ic%) 
  4944.  $SaveName%=$database%+".PrintRes.!PrintOpts" 
  4945.  $SaveName%=$database%+".PrintRes.PrintOpts"
  4946. redraw_icon(wi%,2)
  4947.  wi% 
  4948.  saveW%:
  4949.   Filename$=$SaveName%
  4950.  savefunc$ 
  4951. #    
  4952.  "New database","Copy as":
  4953. +    $SaveName%=
  4954. force_pling($SaveName%)
  4955. $    Filename$=$SaveName%:Type%=0
  4956. 2    
  4957.  "Save as text":
  4958.  Save report from window
  4959. 4    
  4960.  vrules%>0 
  4961.  vrules%=0:
  4962. add_spacers(Count%)
  4963.     Type%=&fff
  4964. 5    Start%=SHtextptr%:End%=Start%+Count%*LenLine%
  4965. -    
  4966.  "Save list":
  4967.  Create report to file
  4968.      Type%=&fff:savetofile%=
  4969. ;    
  4970.  "Save text":
  4971.  Save Text from button or Text Block
  4972.     Type%=&fff:
  4973. =    len%=
  4974. blob_path(
  4975. ,$database%,REC%,Fieldnumber%,36,f$)
  4976. B    SHsaveptr%=
  4977. extend_named_sliding_block(saveanchor%,len%+1)
  4978. &    
  4979.  "OS_File",255,f$,SHsaveptr%
  4980. *    Start%=SHsaveptr%:End%=Start%+len%
  4981. <    
  4982.  "Save sprite":
  4983.  Save from Sprite button or Picture
  4984.     Type%=&ff9
  4985. =    len%=
  4986. blob_path(
  4987. ,$database%,REC%,Fieldnumber%,37,f$)
  4988. B    SHsaveptr%=
  4989. extend_named_sliding_block(saveanchor%,len%+1)
  4990. &    
  4991.  "OS_File",255,f$,SHsaveptr%
  4992. *    Start%=SHsaveptr%:End%=Start%+len%
  4993. -    
  4994.  "Save draw":
  4995.  Save from Draw button
  4996.     Type%=&aff
  4997. =    len%=
  4998. blob_path(
  4999. ,$database%,REC%,Fieldnumber%,38,f$)
  5000. B    SHsaveptr%=
  5001. extend_named_sliding_block(saveanchor%,len%+1)
  5002. &    
  5003.  "OS_File",255,f$,SHsaveptr%
  5004. *    Start%=SHsaveptr%:End%=Start%+len%
  5005. 1    
  5006.  "Save object":
  5007.  Save from Remote button
  5008. 5    
  5009.  "Save as list":
  5010.  Save Scroller as text list
  5011.     Type%=&fff:
  5012. =    len%=
  5013. blob_path(
  5014. ,$database%,REC%,Fieldnumber%,64,f$)
  5015. B    SHsaveptr%=
  5016. extend_named_sliding_block(saveanchor%,len%+1)
  5017. *    Start%=SHsaveptr%:End%=Start%+len%
  5018. &    
  5019.  "OS_File",255,f$,SHsaveptr%
  5020. *    Start%=SHsaveptr%:End%=Start%+len%
  5021. #    
  5022.  "Save options":Type%=&7f5
  5023.  "Save query":
  5024. =    
  5025.  $Query%="" 
  5026.  $savebuff%=query$ 
  5027.  $savebuff%=$Query%
  5028. B    Start%=savebuff%:End%=Start%+
  5029. ($savebuff%)+1:Type%=&7f4   
  5030. *    
  5031.  "Save selection":
  5032. save_selection
  5033.  "Save table":
  5034. c    z$=
  5035. table_info(Tablenumber%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  5036. P    Start%=SHtabptr%(Tablenumber%):End%=Start%+offset%+Rows%*Rec%:Type%=&7f1
  5037.  "Save form file":
  5038.     Type%=&7f2
  5039. lit(designM%,4,
  5040. lit(designM%,5,
  5041. lit(designM%,7,
  5042. 6    
  5043.  adjust%=
  5044. first_writable>0 
  5045. default_key
  5046. 9    
  5047.  "Export selected":
  5048. export_selected(printorder$)
  5049.  savesubW%:
  5050.  savefunc$ 
  5051.  "Export subset":
  5052. )    $SubName%=
  5053. force_pling($SubName%)
  5054. ;    
  5055.  $SubName%=$database% 
  5056.  moan_err%,
  5057. msg("Err222")
  5058. #    Filename$=$SubName%:Type%=0
  5059. *    
  5060.  "Export CSV":Filename$=$SubName%
  5061.  ic% 
  5062.  (b% 
  5063.  %11110000)>0 
  5064. init_drag(wi%,ic%,5)
  5065. Filename$,".")>0 
  5066. 7    
  5067.  butt%<>2 
  5068. save(Filename$,Type%,Start%,End%)
  5069. .    
  5070. write_log(-1,"File saved:",Filename$)
  5071.  butt%=4 
  5072.       
  5073.  wi%=saveW% 
  5074. $        
  5075.  "Wimp_CreateMenu",,-1
  5076. 7        
  5077. close_it(wi%):
  5078. restore_caret(starthere%)
  5079.       
  5080.         
  5081. softerror("",33)
  5082.  "Wimp_CreateMenu",,-1
  5083. close_it(wi%):
  5084. restore_caret(returnto%)
  5085. force_pling(f$)
  5086. leaf$=
  5087. leaf(f$)
  5088. leaf$,1)<>"!" 
  5089.  leaf$="!"+leaf$
  5090. leaf$=
  5091. leaf$,NameLength%)
  5092.  leaf$="!" 
  5093.  leaf$="!XYZZY"
  5094.  leafnamepath$="" 
  5095. =leaf$ 
  5096. =leafnamepath$+"."+leaf$
  5097. key_click(wi%,ic%,b%)
  5098.  I%,J%,L%,tag$,item$
  5099. butt%=(b% 
  5100.  %111)
  5101. z%=(butt%=1)-(butt%=4)
  5102.  butt% 
  5103.  2,4:
  5104.  ic% 
  5105.  8,9,10,11:
  5106. 3    tag$=$
  5107. text(wi%,ic%+4+3*(ic%-8)):L%=
  5108. (tag$)
  5109. &    fieldsM%=
  5110. field_menu(items%,3)
  5111.         
  5112. (      item$=$
  5113. menu_text(fieldsM%,I%)
  5114.       I%+=1
  5115.     %    
  5116. item$,L%)=tag$ 
  5117.  I%>items%
  5118. 6    
  5119.  tag$<>"" 
  5120. tick_one(fieldsM%,0,items%,I%-1)
  5121. A    
  5122. show_pop_up_menu(fieldsM%,wi%,ic%):fieldfunc$=
  5123. (ic%-8)  
  5124.  butt% 
  5125.  1,4:
  5126.  ic% 
  5127. 6    
  5128.  0,1,2,3:
  5129. kcycle(keyfield%(ic%),4*ic%+12,-z%)
  5130. 6    
  5131.  4,5,6,7:
  5132. kcycle(keyfield%(ic%-4),4*ic%-4,z%)
  5133. #    
  5134.  keyfunc$<>"Current key" 
  5135.       keylimit%=0:keylen%=0
  5136.       
  5137.  J%=0 
  5138. *        keylimit%+=len%(keyfield%(J%))
  5139. +        keylen%+=
  5140. text(wi%,4*J%+15))
  5141.       
  5142.       
  5143. 1        
  5144.  keylen%>keylimit%:
  5145. softerror("",26)
  5146. *        
  5147.  keylen%=0:
  5148. softerror("",105)
  5149.         
  5150.         
  5151.  keyfunc$ 
  5152.           
  5153.  "Primary key":
  5154.  ,          
  5155. save_form($database%+".Form")
  5156.           key%=0
  5157. "!          
  5158. copy_keydata(key%)
  5159. #,          RA%=
  5160. ($Records%):f$=$database%
  5161. $(          
  5162. make_empty_index(RA%,0,
  5163. %,          
  5164. save_recs(f$+".Database",RA%)
  5165. &/          present%=7:
  5166. save_keys:
  5167. save_calcs
  5168. '<          design%=
  5169. :present%=1:
  5170. get_it_in(f$):ramwarn%=
  5171. (2          
  5172.  "New primary key":
  5173. new_tree(file%)
  5174. )4          
  5175.  "Create index":
  5176. create_index(key%,
  5177.         
  5178.       
  5179. ,        
  5180.     keyfunc$=""
  5181. .B    
  5182.  butt%=4 
  5183. close_window(keyW%):
  5184. restore_caret(returnto%)
  5185. /;    
  5186. close_window(keyW%):
  5187. restore_caret(returnto%)
  5188. shade_key_icons(con%)
  5189. shade(keyW%,30,con%)
  5190.  I%=0 
  5191. shade(keyW%,I%,con%)
  5192. shade(keyW%,31,con%)
  5193. shade(keyW%,12,
  5194. shade(keyW%,16,
  5195. shade(keyW%,20,
  5196. shade(keyW%,24,
  5197. shade(keyW%,30,con%)
  5198. shade(keyW%,35,con%)
  5199. shade(keyW%,37,con%)
  5200. kcycle(
  5201.  F%,show%,z%)
  5202.  J%=0 
  5203. text(keyW%,show%+J%)=""
  5204. H,F%=
  5205. find_next_valid_field(F%,"index",z%)
  5206.  F%>0 
  5207. J"  $
  5208. text(keyW%,show%)=Tag$(F%)
  5209. K;  $
  5210. text(keyW%,show%+1)="1":
  5211. set_caret(0,keyW%,show%+1)
  5212. text(keyW%,show%+2)="L"
  5213. M'  $
  5214. text(keyW%,show%+3)=
  5215. (len%(F%))
  5216.  J%=0 
  5217. redraw_icon(keyW%,show%+J%)
  5218. find_next_valid_field(F%,use$,z%)
  5219.  F1%,found%
  5220.   F%+=z%
  5221.  F%>fields% 
  5222.  F%=0
  5223.  F%<0 
  5224.  F%=fields%
  5225.   V%=chartype%(F%)
  5226.  F%>0 
  5227.  use$ 
  5228.       
  5229.  "index":
  5230.       
  5231.  vtype$(V%) 
  5232. _,        
  5233.  "S":found%=(V%<>59):
  5234.  Not Logo
  5235. `9        
  5236.  "C":found%=(V%=6 
  5237.  V%=7):
  5238.  Calc & Comp only
  5239. a9        
  5240.  "X":found%=(V%=60):
  5241.  Remote only (pathname)
  5242. b9        
  5243.  "E":found%=(len%(F%)>0):
  5244.  Not simple labels
  5245.       
  5246.       
  5247.  "help":
  5248.       
  5249.  vtype$(V%) 
  5250. f,        
  5251.  "S":found%=(V%<>59):
  5252.  Not Logo
  5253. g"        
  5254.  "C","T","L":found%=
  5255. hL        
  5256.  "X":found%=(V%=36 
  5257.  V%=39 
  5258.  V%=60):
  5259.  Text, Text block & Remote
  5260. i9        
  5261.  "E":found%=(len%(F%)>0):
  5262.  Not simple labels
  5263.       
  5264. k        
  5265.  found%=
  5266.  found%
  5267. copy_keydata(key%)
  5268.  J%,chars%,pos%,word%,field%
  5269. KL%(key%)=0
  5270.  J%=0 
  5271. u7  chars%=
  5272. text(keyW%,4*J%+15)):KL%(key%)+=chars%
  5273. text(keyW%,4*J%+14) 
  5274.  "L":pos%=0
  5275.  "R":pos%=255
  5276. y'    
  5277. :pos%=
  5278. text(keyW%,4*J%+14))
  5279. {$  word%=
  5280. text(keyW%,4*J%+13))
  5281.   field%=keyfield%(J%)
  5282. }<  KW%(key%,J%)=chars%+(pos%<<8)+(word%<<16)+(field%<<24)
  5283.   KF%(key%,J%)=field%
  5284. #case%(key%)=
  5285. selected(keyW%,30)
  5286. set_keydata(key%)
  5287.  J%,chars%,pos%,word%,field%,W%
  5288.  J%=12 
  5289. text(keyW%,J%)=""
  5290.  J%=0 
  5291.   W%=KW%(key%,J%)
  5292.  W%>0 
  5293. 7    chars%=W% 
  5294.  255:$
  5295. text(keyW%,4*J%+15)=
  5296. (chars%)
  5297.     pos%=(W%>>8) 
  5298.  pos% 
  5299. '      
  5300. text(keyW%,4*J%+14)="L"
  5301. )      
  5302.  255:$
  5303. text(keyW%,4*J%+14)="R"
  5304. )      
  5305. text(keyW%,4*J%+14)=
  5306. (pos%)
  5307.         
  5308. ;    word%=(W%>>16) 
  5309.  255:$
  5310. text(keyW%,4*J%+13)=
  5311. (word%)
  5312. >    field%=KF%(key%,J%):$
  5313. text(keyW%,4*J%+12)=Tag$(field%)
  5314.     keyfield%(J%)=field%
  5315. text(keyW%,29)=
  5316. (key%)
  5317. set_icon(keyW%,30,case%(key%))
  5318. set_icon(keyW%,35,incspace%(key%))
  5319. set_icon(keyW%,37,null%(key%))
  5320. key_select(D%)
  5321.  "Wimp_GetCaretPosition",,block%
  5322. wi%=block%!0:ic%=block%!4
  5323. colour(key%,2)
  5324. !    key%=(key%+1) 
  5325.  (Keys%+1)
  5326.  Index$(key%)<>"" 
  5327.  hide%?KF%(key%,0)<>1
  5328. %    key%-=1:
  5329.  key%<0 
  5330.  key%=Keys%
  5331.  Index$(key%)<>"" 
  5332.  hide%?KF%(key%,0)<>1  
  5333. colour(key%,1)
  5334. set_keydata(key%)
  5335. text(searchW%,3)=Index$(key%):
  5336. redraw_icon(searchW%,3)
  5337. top=8*file%+LH%
  5338.  filemem%(file%,key%)>=0 
  5339. 3  addr=filemem%(file%,key%):
  5340. display(key%,addr)
  5341.  addr=
  5342. moveto(key%,top,1)
  5343. restore_caret(starthere%)
  5344. set_key(index$)
  5345.  k%,I$
  5346.     k%=-1
  5347.  index$="" 
  5348.  index$="PRIMARYKEY"
  5349.   k%+=1
  5350.   I$=
  5351. u(Index$(k%))
  5352.  I$=index$ 
  5353.  I$="TEMPORARY"
  5354.  I$=index$ 
  5355. colour(key%,2)
  5356.   key%=k%
  5357. colour(key%,1)
  5358. set_keydata(key%)
  5359.   addr=
  5360. moveto(key%,top,1)
  5361. softerror(index$,199)
  5362. set_colours(wi%,ic%,b%)
  5363.  I%,col%,C%,V%,J%,d$
  5364.  (b% 
  5365.  %111)=4 
  5366.  z%=1 
  5367.  z%=-1
  5368.  (b% 
  5369.  %111) 
  5370.  1,4:
  5371.  ic% 
  5372. !    
  5373.  0,1,2,3,4,5,6,7,8,9,10:
  5374. @    col%=
  5375. get_icon_cols(wi%,ic%):fg%=col% 
  5376.  16:bg%=col% 
  5377. I    
  5378. selected(wi%,18) 
  5379.  fg%=(fg%+z%+16) 
  5380.  bg%=(bg%+z%+16) 
  5381. '    col%=fg%+bg%*16:fcol%(ic%)=col%
  5382. $    
  5383. set_icon_cols(wi%,ic%,col%)
  5384.  I%=0 
  5385.  Keys%
  5386.       
  5387. colour(I%,2)
  5388. colour(key%,1)
  5389.  I%=1 
  5390.  fields%
  5391. F      
  5392.  link$(I%)<>"" 
  5393. set_icon_cols(mainW%,field%(I%),fcol%(8))
  5394. H      
  5395.  mandatory%?I%=1 
  5396. set_icon_cols(mainW%,field%(I%),fcol%(9))
  5397.       V%=chartype%(I%)
  5398.       
  5399.  vtype$(V%)="L" 
  5400.         C%=V%-63
  5401.         
  5402.  J%=1 
  5403. /          
  5404. colour_scroller(I%,J%,fcol%(10))
  5405.         
  5406.       
  5407. /    
  5408. (-1) 
  5409.  d$="Initial" 
  5410.  d$="Resources"
  5411. 5    
  5412. read_colours("<Pbase$Dir>."+d$+".FieldCols")
  5413. close_window(wi%)
  5414. !    
  5415. selected_esg(wi%,1) 
  5416. 3      
  5417.  13:f$="<Pbase$Dir>.Resources.FieldCols"
  5418. )      
  5419.  14:f$=$database%+".FieldCols"
  5420.         
  5421. write_colours(f$)
  5422. create_click(wi%,ic%,b%,caret%)
  5423.  width%,oldmenu%,oldmenu$,ok%
  5424.  caret%=26 
  5425. shade(wi%,29,
  5426. shade(wi%,30,
  5427. butt%=(b% 
  5428.  %111)
  5429.  butt% 
  5430.  2,4:
  5431.  ic%=36 
  5432. show_pop_up_menu(ftypeM%(menunumber%),wi%,ic%)
  5433.  ic%=44 
  5434.  fieldsM%=
  5435. field_menu(items%,0):
  5436. tick_one(fieldsM%,0,fields%-1,Fieldnumber%-1):
  5437. show_pop_up_menu(fieldsM%,wi%,ic%)
  5438.  butt%=4 
  5439.  z%=1 
  5440.  butt%=1 
  5441.  z%=-1 
  5442.  ic% 
  5443. set_limits(0)
  5444. set_limits(1)
  5445. set_limits(2)
  5446. set_limits(3)
  5447. set_limits(4)
  5448. set_limits(5)
  5449. set_limits(6)
  5450. set_limits(7)
  5451. change_type(-z%,menunumber%)
  5452. change_type(z%,menunumber%)
  5453. create_field(
  5454. ($InsText%),posx%,posy%,0,ok%)
  5455.  chartype%(Fieldnumber%)=33 
  5456.  oldmenu%=
  5457. (Tag$(Fieldnumber%)):oldmenu$=$database%+".Menus."+Tag$(oldmenu%)+"Menu"
  5458. create_field(Fieldnumber%,posx%,posy%,Fieldnumber%,ok%)
  5459. remove_field(Fieldnumber%,
  5460.  14,45,46:
  5461. shade(wi%,13,(
  5462. selected(wi%,14)))
  5463.   F%=
  5464. ($InsText%)
  5465.  F%>0 
  5466.  F%<=fields% 
  5467. (    
  5468.  F%<Fieldnumber% 
  5469.  Z%=-1 
  5470.  Z%=1
  5471. (    
  5472. re_sequence(Fieldnumber%,F%,Z%)
  5473. close_window(wi%)
  5474. D  x%=
  5475. ($boxX%):y%=
  5476. ($boxY%):int%=
  5477. ($Gridsnap%):
  5478. snap(x%,y%,int%)
  5479. swap_fields(Fieldnumber%,
  5480. ($InsText%))
  5481. close_it(wi%)
  5482.  42:$boxW%=
  5483. guess_width(
  5484. ($LenText%),fieldtype%,width%)):
  5485. redraw_icon(wi%,9)
  5486. snap_all
  5487.  50,51,52,53:
  5488. nudge(butt%,ic%)
  5489. update_box
  5490.  (present% 
  5491.  4)=0 
  5492. lit(designM%,2,(fields%>0))
  5493.  ic% 
  5494.  18,29:
  5495.  ok% 
  5496.  butt%=4 
  5497. close_window(wi%)
  5498.  30,39,40:
  5499.  butt%=4 
  5500. close_window(wi%)
  5501.  21,47,24,22,23,48,35,54:
  5502.  ic%=54 
  5503. sformat(wi%,
  5504. sformat(wi%,
  5505. sformat(wi%,full%)
  5506.  ic%=56 
  5507. shade(wi%,ic%,
  5508. '0!block%=wi%:
  5509.  "Wimp_GetWindowState",,block%
  5510.  full% 
  5511. :block%!8=block%!16-730:
  5512.  "Wimp_OpenWindow",,block%
  5513. shade(wi%,56,
  5514. shade(wi%,57,
  5515. :block%!8=block%!16-640:
  5516.  "Wimp_OpenWindow",,block%
  5517. update_box
  5518. shade(createW%,6,
  5519. shade(createW%,63,
  5520.  fieldtype% 
  5521.  0,1,2,3,4,5,6,7,46,47,63:
  5522.  adjust% 
  5523. shade(createW%,6,
  5524.  36,37,38,60:
  5525. shade(createW%,63,
  5526.  $TagText%="" 
  5527.  $TagText%=Tag$(fields%):
  5528. redraw_icon(createW%,5)
  5529. 7&num%=(fieldtype%=3 
  5530.  fieldtype%=6)
  5531. shade(createW%,14,num%)
  5532. shade(createW%,45,num%)
  5533. shade(createW%,46,num%)
  5534. shade(createW%,13,num% 
  5535. selected(createW%,14))
  5536. shade(createW%,15,(fieldtype%=3 
  5537.  fieldtype%=47))
  5538. shade(createW%,25,(fieldtype%=3))
  5539. shade(createW%,26,
  5540.  adjust%)
  5541.  $Reformatted%="" 
  5542.  adjust% 
  5543. lit(designM%,3,(fields%>0))
  5544. @ $ValText%=vname$(fieldtype%)
  5545. redraw_icon(createW%,28)
  5546. set_scroll_def(F%,cols%,load%,clear%,height%)
  5547.  ic%,col%,P%,F,f$
  5548. shade(createW%,56,cols%>0)
  5549.  col%=1 
  5550. shade(createW%,col%+56,col%<=cols%)
  5551.  col%
  5552.  load%:
  5553. L0  f$=$database%+"."+Tag$(F%)+"scroll.Format"
  5554.  col%=1 
  5555.  cols%
  5556. O"    P%=
  5557. text(createW%,col%+56)
  5558. P!    
  5559.  F>0 
  5560.  $P%=
  5561.  $P%="?"
  5562. Q&    
  5563. redraw_icon(createW%,col%+56)
  5564.  col%
  5565. close_file(F)
  5566. T)  $
  5567. text(createW%,56)=
  5568. (height% 
  5569.  clear%:
  5570.  ic%=56 
  5571. W:    $
  5572. text(createW%,ic%)="":
  5573. redraw_icon(createW%,ic%)
  5574. set_limits(m%)
  5575.  lit%
  5576. currenttype%=0
  5577. lasttype%=?flist%(m%)
  5578. menunumber%=m%
  5579. lit(ftypeM%(m%),currenttype%)
  5580.   currenttype%+=1
  5581. tick_one(ftypeM%(m%),0,lasttype%-1,currenttype%)
  5582. e+fieldtype%=?(flist%(m%)+currenttype%+1)
  5583. update_box
  5584. change_type(d%,m%)
  5585.   currenttype%+=d%
  5586. m5    
  5587.  currenttype%=lasttype% 
  5588.  currenttype%=0
  5589. n8    
  5590.  currenttype%<0 
  5591.  currenttype%=lasttype%-1
  5592. lit(ftypeM%(m%),currenttype%)
  5593. tick_one(ftypeM%(m%),0,lasttype%-1,currenttype%)
  5594. r+fieldtype%=?(flist%(m%)+currenttype%+1)
  5595. update_box
  5596. passwords(x%,wi%,ic%,b%)
  5597.  ic%=19 
  5598.  (b% 
  5599.  %11110000)>0 
  5600. y   Filename$="Log":Type%=&fff
  5601. init_drag(wi%,ic%,5)
  5602. b%=(b% 
  5603.  %111)
  5604.  1,4:
  5605.  ic% 
  5606. %    
  5607.  $Write%="" 
  5608.  $Write%=$Read%
  5609. *    
  5610.  $Manager%="" 
  5611.  $Manager%=$Write%
  5612.     F=
  5613. ($database%+".Data")
  5614. $    S$=
  5615. encrypt($Read%,
  5616. #F,S$
  5617. %    S$=
  5618. encrypt($Write%,
  5619. #F,S$
  5620. '    S$=
  5621. encrypt($Manager%,
  5622. #F,S$
  5623.  I%=9 
  5624. "      
  5625. selected(passW%,I%)
  5626. close_file(F)
  5627. &    ShowTools%=
  5628. selected(passW%,9)
  5629. .    
  5630. lit(mainM%,6,ShowTools% 
  5631.  (Tools%=1))
  5632. ?    
  5633.  printorder$<>"" 
  5634. lit(mainM%,7,
  5635. selected(passW%,13))
  5636. +    
  5637. lit(mainM%,8,
  5638. selected(passW%,13))
  5639. +    
  5640. lit(mainM%,9,
  5641. selected(passW%,13))
  5642. ,    
  5643. lit(mainM%,10,
  5644. selected(passW%,13))
  5645. +    
  5646. lit(mainM%,2,
  5647. selected(passW%,14))
  5648. close_window(aclW%)
  5649. K    
  5650.  b%=4 
  5651. close_window(passW%):
  5652.  x%>=0 
  5653. restore_caret(starthere%)
  5654.  ShowTools% 
  5655. !      
  5656. close_window(keypadW%)
  5657.       
  5658.       
  5659.  x%>=0 
  5660.         
  5661.  Tools% 
  5662. ;          
  5663. position_window(keypadW%,100,50,0,0,0,0)
  5664. &          
  5665. open_window(mainW%)
  5666.         
  5667.       
  5668.         
  5669. asterisk(
  5670.      
  5671. selected(passW%,16) 
  5672. &      
  5673. open_log("<Log$Dir>.Log",
  5674. '      
  5675. close_log("<Log$Dir>.Log")
  5676.         
  5677. 4    
  5678. shade(prefsW%,34,
  5679. selected(passW%,15))
  5680. P    
  5681. selected(passW%,16) 
  5682. write_log(-1,"Logging discontinued","")
  5683. A    $
  5684. text(aclW%,0)="":$
  5685. text(aclW%,1)="":$
  5686. text(aclW%,12)=""
  5687. @    
  5688. deselect(aclW%,
  5689. selected_esg(aclW%,1)):
  5690. select(aclW%,4)
  5691. 1    
  5692. open_window(aclW%):
  5693. set_caret(0,aclW%,0)
  5694. 4    
  5695. restore_window(wi%,remember%+winbuff%(1,1))
  5696. close_window(aclW%)
  5697. M    
  5698.  b%=4 
  5699. close_window(wi%):
  5700. restore_caret(starthere%) 
  5701. redraw(wi%)
  5702. +    
  5703.  "OS_File",5,"<Log$Dir>.Log" 
  5704. O    
  5705.  d%=1 
  5706.  "OS_CLI","Filer_Run <Log$Dir>.Log" 
  5707. softerror("",195)    
  5708.  F,user$,passwd$,ok%
  5709.  ic%=15 
  5710.  (b% 
  5711.  %11110000)>0:
  5712. 8    Filename$="Acl":Type%=&ffd:
  5713. init_drag(wi%,ic%,5)
  5714.  (b% 
  5715.  %111)=1:
  5716. B    
  5717.  "OS_ReadVarVal","Acl$Dir",block%,255 
  5718. ,,L%:block%?L%=13
  5719. softerror($block%,210)
  5720. b%=(b% 
  5721.  %111)
  5722.  ic% 
  5723. !    
  5724. close_window(aclW%)
  5725. #    
  5726. selected_esg(aclW%,1) 
  5727.       
  5728.       user$=$
  5729. text(aclW%,0)
  5730. I      
  5731. confirm(
  5732. msg("Err123,"+user$)) 
  5733. remove_user(user$,
  5734. ):ok%=
  5735.       
  5736.       user$=$
  5737. text(aclW%,0)
  5738.       
  5739. remove_user(user$,
  5740.       
  5741. 3        
  5742. text(aclW%,0)="":
  5743. softerror("",126)
  5744. B        
  5745. text(aclW%,1)<>$
  5746. text(aclW%,12):
  5747. softerror("",108)
  5748. 3        
  5749. text(aclW%,1)="":
  5750. softerror("",125)
  5751.         
  5752. -        user$=
  5753. encrypt($
  5754. text(aclW%,0),
  5755. /        passwd$=
  5756. encrypt($
  5757. text(aclW%,1),
  5758.         
  5759.  acl% 
  5760. "          F=
  5761. ("<Acl$Dir>.Acl")
  5762.           
  5763. $          
  5764. ("<Acl$Dir>.Acl")
  5765.           acl%=
  5766.         
  5767. 6        
  5768. #F,user$,passwd$,
  5769. selected_esg(aclW%,1)-3
  5770.         
  5771. close_file(F)
  5772.         ok%=
  5773.       
  5774.         
  5775. A    $
  5776. text(aclW%,0)="":$
  5777. text(aclW%,1)="":$
  5778. text(aclW%,12)=""
  5779. K    
  5780. redraw_icon(aclW%,0):
  5781. redraw_icon(aclW%,1)::
  5782. redraw_icon(aclW%,12)
  5783. set_caret(0,aclW%,0)
  5784. 6    
  5785.  (b% 
  5786.  %111)=4 
  5787.  ok%=
  5788. close_window(aclW%)
  5789. remove_user(u$,remove%)
  5790.  user$,id$,p%,p%,ptr%,F,found%
  5791.  u$<>"" 
  5792.   user$=
  5793. encrypt(u$,
  5794.  acl% 
  5795.     F=
  5796. ("<Acl$Dir>.Acl")
  5797.         
  5798.       ptr%=
  5799.       
  5800. #F,id$,p$,p%
  5801.       found%=(id$=user$)
  5802.  found% 
  5803.  found% 
  5804. 1      
  5805. #F=ptr%:
  5806. (id$),"Z"),
  5807. (p$),"Z"),0
  5808. *      
  5809.  remove% 
  5810. softerror(u$,124)
  5811.         
  5812. close_file(F)
  5813. open_log(f$,resume%)
  5814.  "OS_File",5,f$ 
  5815.  d%=1 
  5816.   loghandle%=
  5817. #loghandle%=
  5818. #loghandle%
  5819.  resume% 
  5820. #loghandle%,"Logging resumed "+
  5821. #loghandle%,"Log opened "+
  5822. #loghandle%,"Database: "+$database%
  5823. .  loghandle%=
  5824. (f$):
  5825.  "OS_File",18,f$,&fff
  5826. #loghandle%,"Log started "+
  5827. #loghandle%,"Database: "+$database%
  5828.  acl% 
  5829. #loghandle%,"User: "+user$
  5830. #loghandle%,"Password level used: "+
  5831. (pw%)
  5832. #loghandle%,
  5833. 35,"-")
  5834. close_file(loghandle%)
  5835. logging%=
  5836. close_log(f$)
  5837.  logging% 
  5838.   loghandle%=
  5839. #loghandle%=
  5840. #loghandle%
  5841. #loghandle%,
  5842. 35,"-")
  5843. #loghandle%,"Log closed "+
  5844. #loghandle%,
  5845. 35,"=")
  5846. close_file(loghandle%)
  5847.   logging%=
  5848. write_log(record%,S$,T$)
  5849.  loghandle%
  5850.  logging% 
  5851. #  loghandle%=
  5852. ("<Log$Dir>.Log")
  5853. #loghandle%=
  5854. #loghandle%
  5855.  record%>=0 
  5856. #loghandle%,"    [Record number: "+
  5857. (record%)+"]"
  5858. #loghandle%,"    "+S$
  5859.  T$<>"" 
  5860. #loghandle%,"  "+T$
  5861. close_file(loghandle%)
  5862. count(key%,
  5863.  RU%)
  5864.  zero%,file%,top,sum%
  5865. '    RU%=0
  5866.  file%=0 
  5867.   top=8*file%+LH%
  5868. *"  sum%=
  5869. count_recs(key%,zero%)
  5870.   RU%+=sum%
  5871. ,%  $
  5872. text(miscW%,file%+22)=
  5873. (sum%)
  5874.  file%
  5875. count_recs(key%,
  5876.  ptr%)
  5877.  P%,count%,S%,R%,S$,k$
  5878.  "Hourglass_On"
  5879. neighbour(key%,top,1)
  5880.  P%<>top
  5881.   count%+=1
  5882.  ptr%>0 
  5883.     R%=
  5884. rec_no(k$,key%,P%)
  5885. 8#    
  5886.  R%>highest% 
  5887.  highest%=R%
  5888. 91    !ptr%=R%:$(ptr%+4)=k$:ptr%+=4+KL%(key%)+1
  5889.     SHflag%?R%=0
  5890.   P%=
  5891. neighbour(key%,P%,1)
  5892.  "Hourglass_Off"
  5893. =count%
  5894. analyse(func%)
  5895.  L%,S%,pos%,N%,values%,key%,S$,title$
  5896.  S$(),N%(),R%()
  5897. print_init("W")
  5898. format$="analyse"
  5899.  func%<0 
  5900.  L%=6 
  5901.  key%=func%:L%=KL%(key%)
  5902.  L%>8 
  5903.  Tab%(2)=Lmargin%+L%+6 
  5904.  Tab%(2)=Lmargin%+14
  5905. spacer$,"|")>0 
  5906.  spacer$="|"
  5907. I8maxhead%=0:fspace%=18:hspace%=5*36-18:PrintFields%=2
  5908. Tab%(3)=Tab%(2)+6
  5909. LenLine%=Tab%(3)+6
  5910.  func%<0 
  5911. M%  title$="Analysis of date field"
  5912. N$  S$="Name: "+Tag$(Fieldnumber%)
  5913.   Heading$="Month"
  5914. PV  TextName$=$database%+".PrintJobs.DateAn"+Tag$(Fieldnumber%):$SaveName%=TextName$
  5915. R   title$="Analysis of index"
  5916.   S$="Name: "+Index$(key%)
  5917.   Heading$="Contents"
  5918. UU  TextName$=$database%+".PrintJobs.IndAn"+Tag$(Fieldnumber%):$SaveName%=TextName$
  5919. end_line
  5920. send_title(title$)
  5921. send_title(S$)
  5922. send_title(
  5923. store_string(Heading$,Lmargin%,
  5924. store_rec_num(-2):
  5925. store_string(" Number",Tab%(2),
  5926.  "Hourglass_On"
  5927.  func%<0 
  5928. analyse_date 
  5929. analyse_index
  5930.  "Hourglass_Off"
  5931. store_string("Total",Lmargin%,
  5932. store_rec_num(-2):
  5933. store_string(
  5934. justify(
  5935. (N%),3,2,""),Tab%(2),
  5936. screen_list
  5937. analyse_index
  5938.  P%,ptr%,K$,k%
  5939. K$="***"
  5940. neighbour(key%,top,1)
  5941.  P%<>top
  5942.     R%=
  5943. rec_no(k$,key%,P%)
  5944. o#    
  5945.  k$<>K$ 
  5946.  values%+=1:K$=k$
  5947. p     P%=
  5948. neighbour(key%,P%,1)
  5949.  S$(values%),N%(values%),R%(values%)
  5950. K$="***"
  5951. neighbour(key%,top,1)
  5952.  P%<>top
  5953.     R%=
  5954. rec_no(k$,key%,P%)
  5955.  k$<>K$ 
  5956. x:      ptr%+=1:K$=k$:S$(ptr%)=K$:N%(ptr%)=1:R%(ptr%)=R%
  5957.       
  5958.  N%(ptr%)+=1
  5959. z        
  5960. {     P%=
  5961. neighbour(key%,P%,1)
  5962.  I%=1 
  5963.  ptr%
  5964. ~U  S$=S$(I%):
  5965.  S$="" 
  5966.  S$="<null>" 
  5967.  isadate% 
  5968. transform_date(KL%(key%),S$)
  5969.   S$=
  5970. stripright(S$,"#")
  5971. store_rec_num(R%(I%))
  5972. store_string(S$,Lmargin%,
  5973. store_string(
  5974. justify(
  5975. (N%(I%)),3,2,""),Tab%(2),
  5976.   N%+=N%(I%)
  5977. store_string("No. of values",Lmargin%,
  5978. store_rec_num(-2)
  5979. store_string(
  5980. justify(
  5981. (values%),3,2,""),Tab%(2),
  5982. analyse_date
  5983.  S$(12),N%(12)
  5984. YS$()="<null>","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
  5985. *dbasehandle%=
  5986. ($database%+".Database")
  5987. neighbour(key%,top,1)
  5988.  P%<>top
  5989.   R%=
  5990. rec_no(k$,key%,P%)
  5991. readsmarray(dbasehandle%,R%)
  5992.   S$=F$(Fieldnumber%)
  5993.  S$<>"" 
  5994.     M%=
  5995. S$,4,2))
  5996.     N%(M%)+=1
  5997.  N%(0)+=1
  5998.   P%=
  5999. neighbour(key%,P%,1)
  6000. close_file(dbasehandle%)
  6001.  I%=0 
  6002. store_string(S$(I%),Lmargin%,
  6003. store_string(
  6004. justify(
  6005. (N%(I%)),3,2,""),Tab%(2),
  6006.   N%+=N%(I%)
  6007. update_stats
  6008. $filesize%=
  6009. (RA%)
  6010. $Records%=
  6011. (RA%)
  6012. $used%=
  6013. (RU%)
  6014. #$percent%=
  6015. (RU%*100/RA%))+"%"
  6016.  Keypress processing --------------------------------------------------
  6017. set_keyboard(wi%,ic%)
  6018.  flag%,T%
  6019. selected(prefsW%,21) 
  6020.  T%=0 
  6021.  LastTable%
  6022.  wi%=tableW%(T%) 
  6023.  flag%=
  6024.  flag% 
  6025.  oldwindow%=wi%:oldicon%=ic%
  6026.  wi% 
  6027.  mainW%:
  6028.  chartype%((ic%+1) 
  6029. $    
  6030.  2,4:
  6031.  "OS_Byte",202,0,239
  6032. !    
  6033.  "OS_Byte",202,16,111
  6034.  accessW%:
  6035.  uc% 
  6036.  "OS_Byte",202,0,239 
  6037.  "OS_Byte",202,caps%,111
  6038.  "OS_Byte",202,caps%,111
  6039.  "OS_Byte",118
  6040. process_key
  6041.  wi%,ic%
  6042.  printing% 
  6043.  indexing% 
  6044.  N$,T%
  6045.  "Wimp_GetCaretPosition",,block%
  6046. 4wi%=block%!0:ic%=block%!4:key_pressed%=block%!24
  6047.  T%=0 
  6048.  LastTable%
  6049.  wi%=tableW%(T%) 
  6050.  Tablenumber%=T%
  6051. !Scroller%=
  6052. scroller_num2(wi%)
  6053.  key_pressed% 
  6054. store
  6055. retrieve(scratchpad$)
  6056.  wi% 
  6057.  mainW%:
  6058. main_press(wi%,ic%)
  6059.  passW%:
  6060. dbox_press(4,18,0,0,0)
  6061.  aclW%:
  6062. dbox_press(9,11,0,0,0)
  6063.  changeW%:
  6064. dbox_press(3,6,queryW%,0,0)
  6065.  tabcreateW%:
  6066. dbox_press(2,3,scrollW%,0,MaxCols%*2+1)
  6067.  scrollW%:
  6068. scroll_press
  6069.  saveW%,savesubW%:
  6070. dbox_press(1,3,0,0,0)
  6071.  tableW%(Tablenumber%):
  6072. table_press(Tablenumber%)
  6073.  scrollerW%(Scroller%):
  6074. scroller_press(wi%,ic%,Scroller%,key_pressed%)
  6075.  printW%:
  6076. dbox_press(12,33,0,0,0)
  6077.  printerW%:
  6078. dbox_press(44,67,0,0,0)
  6079.  createW%:
  6080. create_press
  6081.  accessW%:
  6082. dbox_press(3,2,0,0,0)
  6083.  keyW%:
  6084. dbox_press(31,36,0,0,0)
  6085.  matchW%:
  6086. dbox_press(0,6,0,0,0)
  6087.  moveW%:
  6088. dbox_press(1,3,0,0,0)
  6089.  calcW%:
  6090. dbox_press(1,-1,0,0,0)
  6091.  mergeW%:
  6092. dbox_press(6,7,queryW%,0,0)
  6093.  mergebaseW%:
  6094. dbox_press(1,9,0,0,0)
  6095.  reformW%:
  6096. dbox_press(2,1,0,0,0)
  6097.  sizeW%:
  6098. dbox_press(4,5,0,0,0)
  6099.  csvW%:
  6100. dbox_press(9,10,0,0,0)
  6101.  prefsW%:
  6102. dbox_press(39,40,0,0,0)
  6103.  searchW%:
  6104.  key_pressed%=15 
  6105. #    
  6106. search_click(searchW%,9,4)
  6107. !    
  6108. dbox_press(8,10,0,0,0)
  6109.  helpW%:
  6110. dbox_press(7,20,0,0,0)
  6111.  queryW%:
  6112. query_press(oldquery%)
  6113.  inputW%:
  6114. dbox_press(2,3,0,0,0):
  6115.  $Params%="" 
  6116. set_caret(0,wi%,1)
  6117.  keypadW%:
  6118.  customise% 
  6119. (libfunc$+"_press(wi%,ic%)")
  6120.  key_pressed% 
  6121.  13,384,398,399:
  6122.  Ignore these
  6123. query_press(wi%)
  6124.  key_pressed% 
  6125.  wi% 
  6126. .    
  6127.  matchW%,filterW%:
  6128. mouse(0,0,4,wi%,0)
  6129. $    
  6130.  moveW%:
  6131. mouse(0,0,4,wi%,1)
  6132. &    
  6133.  changeW%:
  6134. mouse(0,0,4,wi%,3)
  6135. '    
  6136.  savesubW%:
  6137. set_caret(0,wi%,2)
  6138. query_click(queryW%,2,4)
  6139. shut_window(wi%):
  6140. restore_caret(starthere%)
  6141.  384:
  6142.  wi%<>matchW% 
  6143. match(0,0):
  6144. set_caret(0,queryW%,0)
  6145.  398:
  6146.  wi% 
  6147. &    
  6148.  changeW%:
  6149. set_caret(0,wi%,0)
  6150. '    
  6151.  savesubW%:
  6152. set_caret(0,wi%,2)
  6153.  399:
  6154.  wi% 
  6155.     &    
  6156.  changeW%:
  6157. set_caret(0,wi%,1)
  6158. '    
  6159.  savesubW%:
  6160. set_caret(0,wi%,2)
  6161.  416:
  6162. select(printW%,32):
  6163. deselect(printW%,31)
  6164. position_window(printW%,0,0,0,0,0,0)
  6165. set_caret(0,printW%,26)  
  6166.  385,386,387,388,389,390,391,392,393,401,402,403,404,405,406,407,408,409,417,418,419,420,421,422,423,424,425,458,474,490,459,475,491,507:
  6167. button_action(key_pressed%)
  6168.  "OS_Byte",228,1:
  6169.  "Wimp_ProcessKey",key_pressed%
  6170. main_press(wi%,ic%)
  6171. selected(passW%,10) 
  6172.  "Wimp_ProcessKey",key_pressed%:
  6173.  icon%
  6174.  flash% 
  6175. set_icon(wi%,field%(flash%),state%):flash%=
  6176. trim(wi%,ic%)
  6177. validate(Fieldnumber%,T%,N$)=
  6178. (changed%=
  6179. update_calcs(Fieldnumber%)
  6180.  key_pressed% 
  6181. select_range(1,fields%,
  6182. (-1) 
  6183.  S$="ALL" 
  6184.  S$="TOTALS"
  6185.  Modify% 
  6186. balance(key%):
  6187. print_tree(key%,S$):
  6188. rectify_address(key%)
  6189.  len%(Fieldnumber%)>=10 
  6190. #+    $Rf%(Fieldnumber%)=
  6191. convert_date(4)
  6192. $G    
  6193.  len%(Fieldnumber%)>=8 
  6194.  $Rf%(Fieldnumber%)=
  6195. convert_date(2)
  6196. redraw_icon(wi%,field%(Fieldnumber%))
  6197. check_record 
  6198.  template%=1:
  6199. display(key%,-1)
  6200. )5  fieldsM%=
  6201. field_menu(items%,2+(printorder$=""))
  6202. tick_one(fieldsM%,0,fields%-1,Fieldnumber%-1)
  6203.  "Wimp_GetPointerInfo",,block%
  6204. show_menu(fieldsM%,!block%-150,block%!4+16)
  6205.   fieldfunc$="CtrlF"
  6206. /(  $ChangeTitle%="Field: "+Fieldname$
  6207. position_window(changeW%,0,0,0,0,0,0):
  6208. set_caret(0,changeW%,0)
  6209.  "OS_CLI","Filer_OpenDir "+$database%+".Indices"
  6210. set_up_field_menu
  6211. 4A  keyfunc$="Create index":$KeyTitle%=keyfunc$+": "+Fieldname$
  6212. shade_key_icons(
  6213. deselect(keyW%,30):
  6214. deselect(keyW%,35):
  6215. deselect(keyW%,37)
  6216. position_window(keyW%,0,0,0,504,0,0):
  6217. set_caret(0,keyW%,13)
  6218. 90  keyfunc$="Current key":$KeyTitle%=keyfunc$
  6219. set_keydata(key%):
  6220. shade_key_icons(
  6221. position_window(keyW%,0,0,0,504,0,0)
  6222. set_up_field_menu:
  6223.  LastTable%<>-1 
  6224. position_window(linkW%,0,0,0,0,0,0)
  6225. (-2) 
  6226. (-102) 
  6227.     markpane%=
  6228.  markpane%
  6229.  markpane% 
  6230. A9      !block%=mainW%:
  6231.  "Wimp_GetWindowState",,block%
  6232. B@      
  6233. update_pane(markW%,0,block%!16-block%!8+2,696,62,0,0)
  6234. C9      
  6235. close_window(markW%):
  6236. mark_click(markW%,1,4)
  6237. D        
  6238. F&    
  6239.  Fieldnumber%=Lastwritable% 
  6240. G!      
  6241. close_window(relateW%)
  6242. H-      
  6243. check_record 
  6244. display(key%,-1)
  6245.       
  6246. J5      Fieldnumber%=
  6247. next_editable(Fieldnumber%,1)
  6248. K        
  6249. L,    
  6250. selected(prefsW%,19) 
  6251. relations
  6252. (-1) 
  6253. PC    
  6254. lit(printM%,5) 
  6255. position_window(pselectW%,0,0,0,0,0,0)
  6256. Q3    
  6257. position_window(extracalcW%,0,0,0,0,0,0)
  6258. R4    calc%=Ecalc%:
  6259. set_up_calc(extracalcW%,calc%)
  6260.  filter% 
  6261. VT    
  6262.  field%(buttonfield%(0,22))>0 
  6263. filter(mainW%,4,
  6264. filter(keypadW%,4,
  6265. W.    
  6266. selected(passW%,14) 
  6267. match(0,0)
  6268. query_click(queryW%,2,4)
  6269.  "OS_CLI","Filer_OpenDir "+$database%+".PrintJobs"
  6270.  "OS_CLI","Filer_OpenDir "+$database%+".ValTables"
  6271.  "OS_CLI","Filer_OpenDir "+$database%+".PrintRes"
  6272.  19:starthere%=field%(Fieldnumber%):$StartHere%=Tag$(Fieldnumber%):
  6273. redraw_icon(prefsW%,45):
  6274.  Access% 
  6275. set_caret(0,mainW%,starthere%)
  6276.  len%(Fieldnumber%)>=8 
  6277.     T$=
  6278. a-    
  6279. T$,3,1)=$timesep%:
  6280. T$,6,1)=$timesep%
  6281.     $Rf%(Fieldnumber%)=T$
  6282. c.    
  6283. redraw_icon(wi%,field%(Fieldnumber%))
  6284. get_winpos
  6285. selected(passW%,13) 
  6286. h:    x%=(ScreenWidth%-w%) 
  6287.  2:y%=(ScreenHeight%-h%) 
  6288. i,    choice$(2)="Export":
  6289. act_on_csv_menu
  6290. clear_selection
  6291. keypad_click(keypadW%,1,4)
  6292. close_it(linkW%):
  6293. close_it(keyW%):
  6294. close_it(csvW%)
  6295.  30:Fieldnumber%=
  6296. first_writable:
  6297. set_caret(0,wi%,field%(Fieldnumber%))
  6298.  384:
  6299. selected(passW%,14) 
  6300. r6    
  6301.  qbe% 
  6302. mouse(0,0,4,matchW%,0) 
  6303. match(0,0)
  6304.  394:
  6305.  ShowTools% 
  6306. open_window(keypadW%)
  6307.  398:Fieldnumber%=
  6308. next_editable(Fieldnumber%,1)
  6309. selected(prefsW%,19) 
  6310. relations
  6311.  399:Fieldnumber%=
  6312. next_editable(Fieldnumber%,-1)
  6313. selected(prefsW%,19) 
  6314. relations
  6315.  400:
  6316. mouse(0,0,4,matchW%,0):
  6317. clear_selection
  6318.  416:
  6319. select(printW%,32):
  6320. deselect(printW%,31)
  6321. position_window(printW%,0,0,0,0,0,0)
  6322. set_caret(0,printW%,26)
  6323.  385,386,387,388,389,390,391,392,393,401,402,403,404,405,406,407,408,409,417,418,419,420,421,422,423,424,425,458,474,490,459,475,491,507:
  6324. button_action(key_pressed%)
  6325.  433:
  6326. reveal(
  6327.  434:
  6328. reveal(
  6329.  441:
  6330. protect(wi%,ic%,Fieldnumber%)
  6331.  "OS_Byte",228,1:
  6332.  "Wimp_ProcessKey",key_pressed%
  6333. selected(prefsW%,21) 
  6334.  chartype%(Fieldnumber%) 
  6335. $    
  6336.  2,4:
  6337.  "OS_Byte",202,0,239
  6338. !    
  6339.  "OS_Byte",202,16,111
  6340.  "OS_Byte",118
  6341.  "OS_Byte",15,0
  6342. next_editable(F%,z%)
  6343.  S%,V%,row%,V$,end%
  6344.   F%+=z%
  6345.  F%>fields% 
  6346.  F%=1
  6347.      
  6348.  F%<1 
  6349.  F%=fields%
  6350. 3  V%=chartype%(F%):V$=vtype$(V%):ic%=field%(F%)
  6351.  ((V$="E" 
  6352.  len%(F%)>0) 
  6353.  V$="L")  
  6354. get_icon_cols(wi%,ic%)<>winback%*17
  6355.  "E":
  6356.   wi%=mainW%
  6357. set_caret(0,wi%,ic%)
  6358.  "L":
  6359.   S%=
  6360. scroller_number(F%)
  6361.   wi%=scrollerW%(S%)
  6362.  z%=1 
  6363.     ic%=0:row%=0
  6364.         
  6365.     ic%=scrolldata%(S%,6)-1
  6366. 2    row%=scrolldata%(S%,6) 
  6367.  scrolldata%(S%,8)
  6368.     end%=
  6369. set_caret(0,wi%,ic%)
  6370. scroll_it(wi%,row%,end%)
  6371. user_menu(F%)
  6372. button_action(K%)
  6373.  wi%,ic%,e%,flag%
  6374. button%=
  6375. key_assigned(K%)
  6376.  button%=-1 
  6377.  "Wimp_ProcessKey",K%:
  6378.  ### No keypad action ###
  6379.  button% 
  6380.  23:e%=-1:button%=13
  6381.  24:button%=14:flag%=
  6382.  28:button%=18:flag%=
  6383.  Alter button% so that correct ic% is calculated
  6384.  ShowTools% 
  6385. :ic%=button%:wi%=keypadW%
  6386. :ic%=field%(buttonfield%(0,button%)):wi%=mainW%
  6387.  flag% 
  6388.  button%+=10
  6389.  Put button% back as it was
  6390.  button% 
  6391. invert(wi%,ic%):
  6392. filter(wi%,4,
  6393. selected(wi%,ic%))
  6394. invert(wi%,ic%):
  6395. allow_search(wi%,e%):
  6396. invert(wi%,ic%)
  6397. invert(wi%,ic%):
  6398. display(key%,-2):
  6399. invert(wi%,ic%)
  6400. invert(prefsW%,21)
  6401. val_on_off(
  6402. selected(prefsW%,21))
  6403.  ic%>0 
  6404. shade(wi%,ic%,
  6405. selected(prefsW%,21))
  6406. shaded(wi%,ic%) 
  6407. 1    
  6408.  wi%=keypadW% 
  6409.  ic%>0 
  6410. invert(wi%,ic%)
  6411. &    
  6412. mouse(0,0,4,keypadW%,button%)
  6413. 1    
  6414.  wi%=keypadW% 
  6415.  ic%>0 
  6416. invert(wi%,ic%)
  6417. key_assigned(pressed%)
  6418.     I%=-1
  6419.   I%+=1
  6420.  I%=28 
  6421.  buttonfield%(1,I%)=pressed%
  6422.  buttonfield%(1,I%)=pressed% 
  6423. dbox_press(ok%,esc%,wi2%,down%,up%)
  6424. trim(wi%,ic%)
  6425.  wi% 
  6426.  accessW%:
  6427.  key_pressed% 
  6428. M    
  6429. next_writable(wi%,ic%,1,1,wi2%,down%) 
  6430. mouse(0,0,4,wi%,ok%)
  6431. #    
  6432. mouse(0,0,4,wi%,esc%)
  6433. 7    
  6434.  398:f%=
  6435. next_writable(wi%,ic%,1,0,wi2%,down%)
  6436. 6    
  6437.  399:f%=
  6438. next_writable(wi%,ic%,-1,0,wi2%,up%)
  6439. +    
  6440.  "Wimp_ProcessKey",key_pressed%
  6441.  key_pressed% 
  6442. selected(prefsW%,41) 
  6443. next_writable(wi%,ic%,1,1,wi2%,down%) 
  6444. mouse(0,0,4,wi%,ok%):
  6445. restore_caret(starthere%)
  6446. >    
  6447. mouse(0,0,4,wi%,esc%):
  6448. restore_caret(starthere%)
  6449. 7    
  6450.  398:f%=
  6451. next_writable(wi%,ic%,1,0,wi2%,down%)
  6452. 6    
  6453.  399:f%=
  6454. next_writable(wi%,ic%,-1,0,wi2%,up%)
  6455. #    
  6456.  wi%=tabcreateW% 
  6457.  ic%=0 
  6458. :      $tabcol%=
  6459. (MaxCols%):
  6460. redraw_icon(tabcreateW%,8)
  6461. ;      !block%=scrollW%:
  6462.  "Wimp_GetWindowState",,block%
  6463. =      block%!24=-MaxCols%*44:
  6464.  "Wimp_OpenWindow",,block%
  6465.         
  6466.  385,386,387,388,389,390,391,392,393,401,402,403,404,405,406,407,408,409,417,418,419,420,421,422,423,424,425,458,474,490,506,459,475,491,507:
  6467. $    
  6468. button_action(key_pressed%)
  6469. >    
  6470.  "OS_Byte",228,1:
  6471.  "Wimp_ProcessKey",key_pressed%
  6472. scroll_press
  6473.  row%
  6474. trim(wi%,ic%)
  6475.  key_pressed% 
  6476.  13,398:f%=
  6477. next_writable(wi%,ic%,1,0,tabcreateW%,0)
  6478.  399:f%=
  6479. next_writable(wi%,ic%,-1,0,tabcreateW%,8)
  6480.  "Wimp_ProcessKey",key_pressed%
  6481.  "Wimp_GetCaretPosition",,block%
  6482.  !block%=scrollW% 
  6483.  ic%=block%!4 
  6484.  ic%=0
  6485. row%=ic% 
  6486. 0$tabcol%=
  6487. (row%):
  6488. redraw_icon(tabcreateW%,8)
  6489. scroll_it(scrollW%,row%,
  6490. table_press(T%)
  6491.  icons%,row%,scrollrow%,visible_rows%
  6492. trim(wi%,ic%)
  6493. icons%=Rows%*(TabFields%+1)
  6494.  key_pressed% 
  6495.  ic%<icons%-1 
  6496.  ic%+=1 
  6497.  ic%=0
  6498.  398:
  6499.  ic%<icons%-TabFields%-1 
  6500.  ic%+=(TabFields%+1) 
  6501.  ic%=ic% 
  6502.  (TabFields%+1)
  6503.  399:
  6504.  ic%>=TabFields%+1 
  6505.  ic%-=(TabFields%+1) 
  6506.  ic%=icons%-TabFields%-1+ic% 
  6507.  (TabFields%+1)
  6508.  "Wimp_ProcessKey",key_pressed%
  6509. set_caret(0,tableW%(T%),ic%)
  6510. 'row%=(ic% 
  6511.  (TabFields%+1))-NewTab%
  6512. 8!block%=tableW%(T%):
  6513.  "Wimp_GetWindowState",,block%
  6514. -visible_rows%=(block%!16-block%!8) 
  6515.  44-1
  6516.  scrollrow%=-(block%!24 
  6517.  row%-scrollrow%>visible_rows% 
  6518.  block%!24=(visible_rows%-row%)*44:
  6519.  "Wimp_OpenWindow",,block%
  6520.  row%<scrollrow% 
  6521.  block%!24=-row%*44:
  6522.  "Wimp_OpenWindow",,block%
  6523. create_press
  6524. shaded(wi%,29):
  6525. shaded(wi%,18) 
  6526. dbox_press(18,41,0,0,0)
  6527. shaded(wi%,29) 
  6528. dbox_press(29,41,0,0,0)
  6529. menu_select
  6530.  P%,Q%,I%,M%,field%,umenu%
  6531. "&choice1%=!block%:choice2%=block%!4
  6532. #(choice3%=block%!8:choice4%=block%!12
  6533.  menuhandle% 
  6534.  fontM%:
  6535.  "Font_DecodeMenu",,fontM%,block%,block%+255,255
  6536.  "Wimp_DecodeMenu",,menuhandle%,block%,choices%
  6537.  I%=1 
  6538.   Q%=
  6539. $choices%,".",P%+1)
  6540. +&  choice$(I%)=
  6541. $choices%,P%,Q%-P%)
  6542.   P%=Q%+1
  6543.  "Wimp_GetPointerInfo",,block%
  6544. x%=!block%:y%=block%!4
  6545. redo%=block%!8=1
  6546.  menuhandle% 
  6547.  fontM%:
  6548. display_font_name(
  6549. getstr(block%+255))
  6550.  iconbarM%:
  6551. act_on_icon_bar_menu
  6552.  mainM%:
  6553. act_on_main_menu
  6554.  designM%:
  6555. act_on_create_menu
  6556.  tableM%:
  6557. act_on_table_menu(choice$(1))
  6558.  listM%:
  6559. act_on_text_menu
  6560.  delimiterM%:
  6561. act_on_csv_sep
  6562.  terminatorM%:
  6563. act_on_csv_term
  6564.  scrolltermM%:
  6565. act_on_csv_scrollterm
  6566.  markM%:
  6567. act_on_mark_menu
  6568.  ftypeM%(0):
  6569. act_on_fieldtype_menus(0)
  6570.  ftypeM%(1):
  6571. act_on_fieldtype_menus(1)
  6572.  ftypeM%(2):
  6573. act_on_fieldtype_menus(2)
  6574.  ftypeM%(3):
  6575. act_on_fieldtype_menus(3)
  6576.  ftypeM%(4):
  6577. act_on_fieldtype_menus(4)
  6578.  ftypeM%(5):
  6579. act_on_fieldtype_menus(5)
  6580.  ftypeM%(6):
  6581. act_on_fieldtype_menus(6)
  6582.  ftypeM%(7):
  6583. act_on_fieldtype_menus(7)
  6584.  keystrokeM%:
  6585. act_on_keypad_menu
  6586.  valtablesM%:
  6587. act_on_menu_of_tables
  6588.  fieldsM%:
  6589. act_on_menu_of_fields
  6590.  indicesM%:
  6591. act_on_menu_of_indices
  6592.  userM%:
  6593. act_on_user_menu
  6594.  mergecomM%:
  6595. tick_one(mergecomM%,0,2,choice1%):
  6596. set_mergecom_icons
  6597.  customise% 
  6598. (libfunc$+"_select(menuhandle%)")
  6599.  quit% 
  6600.  redo% 
  6601. show_menu(menuhandle%,menux%,menuy%)
  6602. display_font_name(S$)
  6603. S$,"\F")
  6604. S$,P%+2)
  6605. S$,"\")
  6606. S$,P%-1)
  6607. text(printerW%,fontdisplay%)=S$
  6608. redraw_icon(printerW%,fontdisplay%)
  6609. act_on_user_menu
  6610.  S%,menic%,flags%,wi%,ic%,L%,choice$
  6611. ]0menic%=userM%+28+choice1%*24:flags%=menic%!8
  6612.  (flags% 
  6613.  (1<<8))=0 
  6614.   choice$=
  6615. $(menic%+12),12)
  6616.  choice$=$(menic%!12)
  6617. find_insertion_icon(menufield%)
  6618. insert_text(wi%,ic%,menufield%,choice$)
  6619. find_insertion_icon(F%)
  6620.  chartype%(F%) 
  6621.  64,65,66,67:
  6622.   S%=
  6623. scroller_number(F%)
  6624.  "Wimp_GetCaretPosition",,block%:wi%=!block%:ic%=block%!4
  6625.  wi%<>scrollerW%(S%) 
  6626.  wi%=scrollerW%(S%):ic%=0
  6627.   wi%=mainW%:ic%=field%(F%)
  6628. insert_text(wi%,ic%,F%,S$)
  6629.  fix%(F%)<>0 
  6630. fix_point(S$,F%)
  6631. buffer_length(wi%,ic%)
  6632. (S$)<=L% 
  6633. text(wi%,ic%)=S$
  6634. redraw_icon(wi%,ic%)
  6635. set_caret(0,wi%,ic%)
  6636.  wi%=mainW% 
  6637.  changed%=
  6638.  ScrollChanged%=
  6639. softerror(""""+S$+"""",7)
  6640. act_on_mark_menu
  6641.  choice$(1) 
  6642.  "Include":
  6643. tick(markM%,0,
  6644. tick(markM%,1,
  6645. val(markW%,0)="Snull,yes"
  6646.  "Exclude":
  6647. tick(markM%,1,
  6648. tick(markM%,0,
  6649. val(markW%,0)="Snull,no"
  6650. redraw_icon(markW%,0)
  6651. warn_of_marks
  6652. act_on_main_menu
  6653.  choice$(1) 
  6654.  "Information":
  6655. count(key%,RU%):
  6656. update_stats
  6657. position_window(miscW%,x%-200,y%-300,0,0,0,0)
  6658.  "Miscellaneous":
  6659. act_on_misc_menu
  6660.  "Print":
  6661. act_on_print_menu
  6662.  "Validation":
  6663. act_on_validation_menu
  6664.  "Index":
  6665. act_on_index_menu
  6666.  "Show keypad Tab":
  6667.  ShowTools% 
  6668. position_window(keypadW%,-1,-1,0,0,0,0)
  6669.  "Export subset":
  6670. ?  export%=
  6671. :$SubTitle%="Export subset":savefunc$=choice$(1)
  6672. +  $SubName%=
  6673. dir($database%)+".!Subset"
  6674. .  $SubSprite%="snew_appl;Pptr_hand,4,0;R2"
  6675. position_window(savesubW%,x%-244,y%-161,0,0,0,0):
  6676. set_caret(0,queryW%,0)
  6677.  "CSV files":
  6678. act_on_csv_menu
  6679.  "Undo changes":
  6680. restore(1,fields%,"",-1)
  6681.  "Help":
  6682.  "Wimp_StartTask","<Pbase$Dir>.!Help"
  6683. act_on_field_menu
  6684. act_on_index_menu
  6685.  choice$(2) 
  6686.  "Show details ^K":
  6687. show_key
  6688.  "Delete":
  6689. confirm(
  6690. msg("Err147,"+choice$(3))) 
  6691. remove_index(choice$(3),
  6692.  "Show files ^I":
  6693.  "OS_CLI","Filer_OpenDir "+$database%+".Indices"
  6694. show_key
  6695. show_key
  6696. -$KeyTitle%=choice$(1):keyfunc$=choice$(1)
  6697. set_keydata(key%):
  6698. shade_key_icons(
  6699. position_window(keyW%,x%-284,y%-252,0,504,0,0)
  6700. act_on_csv_menu
  6701.  choice$(2) 
  6702.  "Export":
  6703. 9  $SubTitle%="Export CSV file":savefunc$="Export CSV"
  6704. C  $SubName%=$database%+".PrintJobs."+
  6705. set_up_save_box(2)+"file"
  6706. position_window(savesubW%,x%-244,y%-161,0,0,0,0):
  6707. set_caret(0,queryW%,0)
  6708.  "Options":
  6709.   $CSVTitle%="CSV options"
  6710. shade(csvW%,0,
  6711. text(csvW%,9)="Accept"
  6712. position_window(csvW%,x%-350,y%-180,700,440,0,0)
  6713. set_up_save_box(box%)
  6714.  f$,t$,v$
  6715. text(csvW%,14) 
  6716.  "Comma":f$="CSV"
  6717.  "TAB":f$="TSV"
  6718. :f$="?SV"
  6719. t$="dfe":Type%=&dfe
  6720. &v$="sfile_"+t$+";Pptr_hand,4,0;R2"
  6721.  box%=1 
  6722.  $SaveSprite%=v$ 
  6723.  $SubSprite%=v$
  6724. act_on_misc_menu
  6725.  choice$(2) 
  6726.  "Move/delete":
  6727. deselect(moveW%,
  6728. selected_esg(moveW%,1)):
  6729. select(moveW%,4)
  6730. shade(moveW%,8,
  6731. shade(moveW%,9,
  6732. shade(moveW%,12,
  6733. shade(moveW%,13,
  6734. '  source%=file%:dest%=(file%+1) 
  6735. text(moveW%,7)=$Subfile%(source%):$
  6736. text(moveW%,8)=$Subfile%(dest%):$
  6737. text(moveW%,1)="Move"
  6738. position_window(moveW%,x%-253,y%-232,0,0,0,0):
  6739. set_caret(0,queryW%,0)
  6740.  "Set passwords":
  6741. position_window(passW%,x%-213,y%-388,0,0,0,0):
  6742. set_caret(0,passW%,2)
  6743.  "Field colours":
  6744. position_window(colW%,x%-213,y%-388,0,0,0,0)
  6745.  "Edit template ^E":
  6746. check_record 
  6747.  template%=1:
  6748. display(key%,-1)
  6749.  "Name subfile":
  6750.  choice3% 
  6751. H    P%=
  6752. $RecInfo%,"Record")-1:$RecInfo%=$Subfilename%+
  6753. $RecInfo%,P%)
  6754. &    $Subfile%(file%)=$Subfilename%
  6755. asterisk(
  6756.  "Rename database":
  6757.  choice3%=0 
  6758. rename_database($NewName%)
  6759. act_on_print_menu
  6760.  choice$(2) 
  6761.  "Print","Create report":
  6762. match(x%-396,y%-131)
  6763.  "Show resources ^R":
  6764.  "OS_CLI","Filer_OpenDir "+$database%+".PrintRes"
  6765.  "Options":
  6766. select(printW%,32):
  6767. deselect(printW%,31)
  6768. position_window(printW%,x%-458,y%-401,0,0,0,0)
  6769. set_caret(0,printW%,26)
  6770.  "Save query":
  6771. -  $SaveName%=$database%+".PrintRes.Query"
  6772. 2  savefunc$=choice$(2):
  6773. save_click(saveW%,1,4)
  6774.  "Numeric fields":
  6775. position_window(pselectW%,0,0,0,0,0,0)
  6776.  "Extra calculations":
  6777. position_window(extracalcW%,0,0,0,0,0,0)
  6778. 2  calc%=Ecalc%:
  6779. set_up_calc(extracalcW%,calc%)
  6780.  "Save selection":
  6781. 1  $SaveName%=$database%+".PrintRes.Selection"
  6782. 2  savefunc$=choice$(2):
  6783. save_click(saveW%,1,4)
  6784.  "Show jobs done ^P":
  6785.  "OS_CLI","Filer_OpenDir "+$database%+".PrintJobs"
  6786.  "Clear selection ^Z":
  6787. clear_selection
  6788.  "Display selection":
  6789. get_calc(
  6790. (choice$(3)))
  6791.  "Select all ^A":
  6792. select_range(1,fields%,
  6793. act_on_validation_menu
  6794.  choice$(2) 
  6795.  "Create table":
  6796.  LastTable%=MaxTabs%-1 
  6797. 4    
  6798. softerror("tables,"+
  6799. (MaxTabs%)+",Tabs",23)
  6800.         
  6801. F    $
  6802. text(tabcreateW%,0)="":$
  6803. text(tabcreateW%,1)="":$tabcol%="0"
  6804.  I%=0 
  6805.  MaxCols%*2+1
  6806.        $
  6807. text(scrollW%,I%)=""
  6808. *    
  6809. set_icon_cols(tabcreateW%,13,&28)
  6810. *    
  6811. set_icon_cols(tabcreateW%,14,&07)
  6812. W    
  6813. position_window(tabcreateW%,x%-241,y%-301,0,0,0,0):
  6814. set_caret(0,tabcreateW%,0)
  6815.  "Display table":
  6816.  choice3%>=0 
  6817.     Tablenumber%=choice3%
  6818. %    
  6819. show_table(Tablenumber%,0,0)
  6820.  "Show files ^Q":
  6821.  "OS_CLI","Filer_OpenDir "+$database%+".ValTables"
  6822. act_on_field_menu
  6823. choice$(2),1)="."
  6824.   choice$(2)=
  6825. choice$(2),2)
  6826.  choice$(2) 
  6827.  "Create index":
  6828. =  keyfunc$=choice$(2):$KeyTitle%=keyfunc$+": "+Fieldname$
  6829. shade_key_icons(
  6830. deselect(keyW%,30):
  6831. deselect(keyW%,35):
  6832. deselect(keyW%,37)
  6833. position_window(keyW%,x%-284,y%-252,0,504,0,0):
  6834. set_caret(0,keyW%,13)
  6835.  "Analyse index":
  6836. analyse(
  6837. is_a_key(Fieldnumber%))
  6838.  "Analyse months":
  6839. analyse(-1)
  6840.  "Link to table":
  6841. position_window(linkW%,x%-350,y%-129,0,0,0,0)
  6842.  "Calculations","Combine fields","Set base value":
  6843. position_window(calcW%,0,0,0,0,0,0):
  6844. set_caret(0,calcW%,0)
  6845.  "Global changes":
  6846. position_window(changeW%,x%-252,y%-214,0,0,0,0):
  6847. set_caret(0,changeW%,0)
  6848.  "Start editing ^S":
  6849.  ]  starthere%=field%(Fieldnumber%):$StartHere%=Tag$(Fieldnumber%):
  6850. redraw_icon(prefsW%,45)
  6851.  Access% 
  6852. set_caret(0,mainW%,starthere%)
  6853.  "Remove text file","Remove sprite","Remove drawfile","Unlink directory","Unlink file","Blank list":
  6854.  chartype%(Fieldnumber%) 
  6855. %4    link$(Fieldnumber%)="":$Rf%(Fieldnumber%)=""
  6856. &:    $
  6857. val(mainW%,field%(Fieldnumber%))="R5;Ssmall_dir"
  6858. '1    
  6859. redraw_icon(mainW%,field%(Fieldnumber%))
  6860. )4    link$(Fieldnumber%)="":$Rf%(Fieldnumber%)=""
  6861. *7    $
  6862. val(mainW%,field%(Fieldnumber%))="R5;Saction"
  6863. +1    
  6864. redraw_icon(mainW%,field%(Fieldnumber%))
  6865. ,"    
  6866.  60:$Rf%(Fieldnumber%)=""
  6867. -F    $
  6868. val(mainW%,field%(Fieldnumber%))="R5;Pptr_ext,8,4;Sdropfile"
  6869. .1    
  6870. redraw_icon(mainW%,field%(Fieldnumber%))
  6871. /H    
  6872. delete_blob(Fieldnumber%,object$,mainW%,field%(Fieldnumber%))
  6873. asterisk(
  6874.  "Save text file":
  6875. 3I  $SaveName%=$database%+".PrintJobs.TextFile":
  6876. save_click(saveW%,1,4)
  6877.  "Save sprite":
  6878. 5G  $SaveName%=$database%+".PrintJobs.Sprite":
  6879. save_click(saveW%,1,4)
  6880.  "Save drawfile":
  6881. 7I  $SaveName%=$database%+".PrintJobs.DrawFile":
  6882. save_click(saveW%,1,4)
  6883.  "Save as list":
  6884. 91  $SaveName%=$database%+".PrintJobs.TextList"
  6885. :2  savefunc$=choice$(2):
  6886. save_click(saveW%,1,4)
  6887.  "Save as CSV":
  6888. <E  $SaveName%=$database%+".PrintJobs."+
  6889. set_up_save_box(1)+"file":
  6890. =C  savefunc$=choice$(2):writescroller%=
  6891. save_click(saveW%,1,4)
  6892.  "Undo changes":
  6893. restore(Fieldnumber%,Fieldnumber%,"",-1)
  6894.  "Compact sequence":
  6895. compact(Fieldnumber%)
  6896. compact(F%)
  6897.  sequenceval$,V$
  6898. is_a_key(F%) 
  6899.  key%:
  6900. confirm(
  6901. msg("Err128")) 
  6902. H'    
  6903. split_link(F%,V$,sequenceval$)
  6904.     V$=sequenceval$
  6905.  "Hourglass_On"
  6906. K.    dbasehandle%=
  6907. ($database%+".Database")
  6908. L!    P%=
  6909. neighbour(key%,top,1)
  6910. M,    
  6911. scan_file("P%<>top",key%,file%,7,1)
  6912.  "Hourglass_Off"
  6913. O!    
  6914. close_file(dbasehandle%)
  6915. P%    calc$(F%)=V$+"|"+sequenceval$
  6916. save_calcs:
  6917. save_keys
  6918. softerror(Tag$(F%),116)
  6919. softerror(Tag$(F%),127)
  6920. act_on_keypad_menu
  6921.  choice$(1) 
  6922.  "Defaults":
  6923. load_functionkeys
  6924.  "Save choices":
  6925. save_fkeys
  6926.  "List keys":
  6927. list_fkeys
  6928. act_on_csv_sep
  6929.  choice$(1) 
  6930.  "Comma":sep$=","
  6931.  "TAB":sep$=
  6932.  "CR":sep$=
  6933.  "LF":sep$=
  6934.  sep$=$Delim%
  6935. tick_one(menuhandle%,0,3,choice1%)
  6936. text(csvW%,14)=choice$(1)
  6937. redraw_icon(csvW%,14)
  6938. act_on_csv_term
  6939.  choice$(1) 
  6940.  "CR":term$=
  6941. (13)                               
  6942.  "LF":term$=
  6943.  "CR LF":term$=
  6944. (13)+
  6945.  "LF CR":term$=
  6946. (10)+
  6947.  "CR CR":term$=
  6948. (13)+
  6949.  "LF LF":term$=
  6950. (10)+
  6951. :term$=$Termin%
  6952. tick_one(menuhandle%,0,5,choice1%)
  6953. text(csvW%,15)=choice$(1)
  6954. redraw_icon(csvW%,15)
  6955. act_on_csv_scrollterm
  6956.  choice$(1) 
  6957.  "Semicolon":scrollterm$=";"
  6958.  "Comma":scrollterm$=","
  6959.  "TAB":scrollterm$=
  6960.  "Space":scrollterm$=" "
  6961. :scrollterm$=$Scrterm%
  6962. tick_one(menuhandle%,0,3,choice1%)
  6963. text(csvW%,27)=choice$(1)
  6964. redraw_icon(csvW%,27)
  6965. act_on_text_menu
  6966. choice$(1),4) 
  6967.  "Save":
  6968.   $SaveName%=TextName$
  6969. /  $SaveSprite%="sfile_fff;Pptr_hand,4,0;R2"
  6970. 2  savefunc$=choice$(1):
  6971. save_click(saveW%,1,4)
  6972.  "Sort":
  6973.  choice2%=1 
  6974.  z%=-1 
  6975.  z%=1
  6976. sort_list(sort_textcol%,z%)
  6977.  "Shri":
  6978. remove_white_space(format$)
  6979. screen_list
  6980.  "Disc":
  6981. lose_list
  6982. act_on_create_menu
  6983.  choice$(1) 
  6984.  "Create field":
  6985. selected_esg(createW%,1)=54 
  6986. %    wht%=730:
  6987. sformat(createW%,
  6988. "    
  6989. set_scroll_def(0,1,
  6990. '    
  6991.  wht%=640:
  6992. sformat(createW%,
  6993. "    
  6994. set_scroll_def(0,0,
  6995. position_window(createW%,x%-425,y%-320,0,wht%,0,0):
  6996. set_caret(0,createW%,4)
  6997.  "Edit field":
  6998.  vtype$(chartype%(Fieldnumber%))="L" 
  6999.  wht%=730 
  7000.  wht%=640
  7001. position_window(createW%,x%-425,y%-320,0,wht%,0,0):
  7002. set_caret(0,createW%,4)
  7003.  "Fields created":
  7004.  choice2%>=0 
  7005. design_field(2,choice2%*2+1,
  7006.  "Save form file":
  7007. #  $SaveName%=$database%+".Form"
  7008. 2  savefunc$=choice$(1):
  7009. save_click(saveW%,1,4)
  7010.  "Default database":
  7011. save_form($database%+".Form")
  7012. first_writable>0 
  7013. default_key
  7014. #    
  7015. defaults($database%,100,0)
  7016. softerror("",35)
  7017.  "Primary key":
  7018. $  fieldsM%=
  7019. field_menu(items%,1)
  7020.   F%=
  7021. first_writable
  7022. 0  starthere%=field%(F%):$StartHere%=Tag$(F%)
  7023.   $KeyTitle%=choice$(1)
  7024.   keyfunc$=choice$(1)
  7025.    case%(0)=
  7026. set_keydata(0)
  7027. shade_key_icons(
  7028. shade(keyW%,37,
  7029. position_window(keyW%,x%-284,y%-252,0,504,0,0):
  7030. set_caret(0,keyW%,13)
  7031.  "Quit design":
  7032. quit_design
  7033. quit_design
  7034.  F%,real$,visible$
  7035. nosave%=
  7036. adjust_on(
  7037. save_form($database%+".Form")
  7038. save_calcs
  7039.  $Reformatted%<>"" 
  7040. close_window(mainW%)
  7041. complete(6)
  7042. get_it_in($Original%)
  7043. complete(6)
  7044. do_reformat
  7045. get_it_in($database%):
  7046. do_reformat
  7047.  $Reformatted%=$database% 
  7048. softerror("",36):
  7049. reformat($Reformatted%) 
  7050. softerror($Reformatted%+",",178):
  7051. close_window(reformW%)
  7052. &db$=$Reformatted%:$Reformatted%=""
  7053. get_it_in(db$)
  7054. complete(6)
  7055. selected(reformW%,11) 
  7056. softerror($database%+","+$Original%,161)
  7057.  F%,I%,R$,V$,old$,new$
  7058.  F%=1 
  7059.  fields%
  7060.  chartype%(F%) 
  7061.  6,7:
  7062. split_link(F%,R$,V$)
  7063. '    
  7064. calc_formula(F%,calcW%,1,4,V$)
  7065.  menfield%(I%,0)<>-1
  7066. =  buttonfield%=menfield%(I%,0):datafield%=menfield%(I%,1)
  7067.  Tag$(buttonfield%)<>Tag$(datafield%) 
  7068. 4    
  7069.  Datafield for menu must have a renamed tag
  7070. C    old$=Tag$(buttonfield%)+"menu":new$=Tag$(datafield%)+"menu"
  7071. U    
  7072.  "OS_CLI","Rename "+$database%+".Menus."+old$+" "+$database%+".Menus."+new$
  7073. +    Tag$(buttonfield%)=Tag$(datafield%)
  7074.   I%+=1
  7075. save_form($database%+".Form")
  7076. store_menu_inf
  7077.  F%,I%,datafield%
  7078. menfield%()=-1
  7079.  F%=1 
  7080.  fields%
  7081.  chartype%(F%)=33 
  7082.     datafield%=0
  7083.         
  7084.       datafield%+=1
  7085. #    
  7086.  Tag$(datafield%)=Tag$(F%)
  7087. 5    menfield%(I%,0)=F%:menfield%(I%,1)=datafield%
  7088.     I%+=1
  7089. act_on_fieldtype_menus(m%)
  7090. currenttype%=choice1%
  7091. +fieldtype%=?(flist%(m%)+currenttype%+1)
  7092. tick_one(menuhandle%,0,lasttype%,choice1%)
  7093. update_box
  7094.  fieldtype% 
  7095.  64,65,66,67:
  7096. set_scroll_def(0,fieldtype%-63,
  7097. set_scroll_def(0,0,
  7098. act_on_menu_of_tables
  7099. Tablenumber%=choice1%
  7100. $$Tablename%=table$(Tablenumber%)
  7101. tick_one(menuhandle%,0,LastTable%,choice1%)
  7102. redraw_icon(linkW%,0)
  7103. act_on_menu_of_fields
  7104. (choice$(1)):
  7105.  Items start with field-number
  7106.  fieldfunc$ 
  7107.  "mergecom":mergefield%=F%:
  7108. set_mergecom_icons
  7109.  "getcalc":
  7110. get_calc(F%)
  7111.  "calc":
  7112. enter_tag(Tag$(F%))
  7113.  "create":
  7114. design_field(2,F%*2-1,
  7115.  "help":
  7116.   Match_tag%=F%
  7117. text(helpW%,0)=Tag$(Match_tag%):
  7118. redraw_icon(helpW%,0)
  7119. tick_one(menuhandle%,0,items%,choice1%)
  7120.  "CtrlF":
  7121.  printorder$="" 
  7122.   Fieldnumber%=F%
  7123. A    
  7124.  chartype%(Fieldnumber%)<6 
  7125.  chartype%(Fieldnumber%)=8 
  7126.  3      
  7127. set_caret(0,mainW%,field%(Fieldnumber%))
  7128. !.      
  7129. selected(prefsW%,19) 
  7130. relations
  7131. "        
  7132. get_calc(F%)
  7133.  "0","1","2","3":
  7134.   keyfield%=
  7135. (fieldfunc$)
  7136.  keyfunc$<>"Current key" 
  7137. ("    
  7138. ticked(fieldsM%,F%-1) 
  7139. )O      keyfield%(keyfield%)=0:
  7140. kcycle(keyfield%(keyfield%),4*keyfield%+12,0)
  7141.       
  7142. +P      keyfield%(keyfield%)=F%:
  7143. kcycle(keyfield%(keyfield%),4*keyfield%+12,0)
  7144. ,2      
  7145. tick_one(menuhandle%,0,items%,choice1%)
  7146. -        
  7147. get_calc(F%)
  7148.  F%>MaxFields%+2 
  7149.   calc%=F%-MaxFields%-3
  7150. position_window(extracalcW%,0,0,0,0,0,0)
  7151. set_up_calc(extracalcW%,calc%)
  7152. act_on_table_menu(ch$)
  7153.  ch$="Save":
  7154. =2  $SaveName%=$database%+".ValTables."+$tableM%
  7155. >4  savefunc$="Save table":
  7156. save_click(saveW%,1,4)
  7157.  ch$="Save as CSV":
  7158. @F  $SaveName%=$database%+".PrintJobs."+
  7159. set_up_save_box(1)+$tableM%
  7160. A9  savefunc$=ch$:writetable%=
  7161. save_click(saveW%,1,4)
  7162.  ch$="Clear":
  7163. clear_table(Tablenumber%)
  7164.  ch$="Print":
  7165. print_table(Tablenumber%)
  7166. ch$,4)="Sort":
  7167. sort_table(Tablenumber%,sort_tabcol%)
  7168.  ch$="Undo all":
  7169. restore_table(Tablenumber%)
  7170.  ch$="Undo change":
  7171. restore_tabfield
  7172.  ch$="Modify":
  7173. modify_table(Tablenumber%,tabcreateW%)
  7174. act_on_icon_bar_menu
  7175.  choice$(1) 
  7176.  "Rename database":
  7177.  choice2%=0 
  7178. rename_database($NewName%)
  7179.  "Help":
  7180.  "Wimp_StartTask","<Pbase$Dir>.!Help"
  7181.  "Utilities":
  7182.  choice$(2) 
  7183.  "New primary key":
  7184.     $KeyTitle%=choice$(2)
  7185. S+    keyfunc$=choice$(2):
  7186. set_keydata(0)
  7187.  (present% 
  7188.  2)=2 
  7189. U/      
  7190. select(keyW%,32):
  7191. deselect(keyW%,33)
  7192. V/      
  7193. shade(keyW%,32,
  7194. shade(keyW%,33,
  7195.       
  7196. X/      
  7197. select(keyW%,33):
  7198. deselect(keyW%,32)
  7199. Y/      
  7200. shade(keyW%,32,
  7201. shade(keyW%,33,
  7202. Z        
  7203. [.    
  7204. shade_key_icons(
  7205. shade(keyW%,37,
  7206. \N    
  7207. position_window(keyW%,x%-284,y%-303,0,606,0,0):
  7208. set_caret(0,keyW%,13)
  7209. ]1    
  7210.  "New record format","Rebuild database":
  7211. ^1    
  7212. shade(reformW%,0,
  7213. shade(reformW%,2,
  7214. _E    $Original%=$database%:$Reformatted%="!NewFormat":$Newform%=""
  7215. `5    
  7216. position_window(reformW%,x%-237,100,0,0,0,0)
  7217. a     
  7218. set_caret(0,reformW%,6)
  7219. b)    
  7220.  "Adjust format","Alter format":
  7221. check_record 
  7222.       
  7223. adjust_on(
  7224.       
  7225. store_menu_inf
  7226.       
  7227. open_window(mainW%)
  7228.       
  7229. display(key%,-1)
  7230. h        
  7231.  "Merge databases":
  7232. jI    $
  7233. text(mergebaseW%,2)=$database%:$
  7234. text(mergebaseW%,4)=$database%
  7235. kO    
  7236. shade(mergebaseW%,4,
  7237. shade(mergebaseW%,7,
  7238. shade(mergebaseW%,1,
  7239. l     $
  7240. text(mergebaseW%,3)=""
  7241. m8    
  7242. position_window(mergebaseW%,x%-237,100,0,0,0,0)
  7243. n]    
  7244.  "Balance index ^B":
  7245. balance(key%):
  7246. print_tree(key%,"TOTALS"):
  7247. rectify_address(key%)
  7248. o1    S$=key$(key%):
  7249.  case%(key%) 
  7250. u(S$)
  7251. pA    val$=
  7252. type(key%):
  7253.  val$="VAL" 
  7254.  kl%=KL%(key%) 
  7255.  kl%=
  7256. q#    addr=
  7257. search(S$,key%,2)    
  7258.  "Print index":
  7259.  choice$(3) 
  7260. t7      
  7261.  "All subfiles":
  7262. tick_one(indextreeM%,0,1,0)
  7263. u:      
  7264.  "Current subfile":
  7265. tick_one(indextreeM%,0,1,1)
  7266. v6      
  7267.  "Symmetrical":
  7268. tick_one(indextreeM%,2,3,2)
  7269. w5      
  7270.  "Root first":
  7271. tick_one(indextreeM%,2,3,3)
  7272.       
  7273.  "Complete":
  7274. y!      
  7275. print_tree(key%,"ALL")
  7276.       
  7277.  "Totals only":
  7278. {$      
  7279. print_tree(key%,"TOTALS")
  7280. |&      
  7281. print_tree(key%,"TOTALS")
  7282. }        
  7283. ~(    
  7284.  "Print field data":
  7285. field_data
  7286. -    
  7287.  "Find duplicates":
  7288. duplicates(key%)
  7289.  "Merge commands":
  7290. <    mergefield%=1:$
  7291. text(mergecomW%,3)=Tag$(mergefield%)
  7292. 0    
  7293. tick_one(mergecomM%,0,2,0):$Expcol%="1"
  7294. set_mergecom_icons
  7295. 0    
  7296. position_window(mergecomW%,0,0,0,0,0,0)
  7297.  "Close database":
  7298. check_record 
  7299.  $Reformatted%="":
  7300.  Setting reformat name to "" cannot be done inside PROCexit because it is called during reformatting process where pathname must be remembered
  7301.  "Preferences":
  7302. position_window(prefsW%,x%-371,150,0,0,0,0):
  7303. set_caret(0,prefsW%,1)
  7304.  "Quit":
  7305.  Access% 
  7306.  quit%=
  7307. check_record 
  7308.  quit%=
  7309. reveal(vis%)
  7310.  F%,dic%,fic%
  7311.  Modify% 
  7312.  F%=1 
  7313.  fields%
  7314. &    dic%=desc%(F%):fic%=field%(F%)
  7315.  hide%?F%=1 
  7316.       
  7317.  vis% 
  7318.         
  7319.         K%=
  7320. is_a_key(F%)
  7321.         
  7322.  K%=-1 
  7323. P          
  7324. set_icon_cols(wi%,dic%,winback%*16+7):
  7325. set_icon_cols(wi%,fic%,04)
  7326. 9          
  7327. colour(K%,2):
  7328. set_icon_cols(wi%,fic%,04)
  7329.         
  7330. Y        
  7331. set_icon_cols(wi%,dic%,winback%*17):
  7332. set_icon_cols(wi%,fic%,winback%*17)
  7333.       
  7334.         
  7335. make_index_menu
  7336. protect(wi%,ic%,F%)
  7337.  Modify% 
  7338. get_icon_cols(wi%,ic%) 
  7339. 2    
  7340. set_icon_cols(wi%,ic%,04):hide%?F%=1
  7341. 2    
  7342. set_icon_cols(wi%,ic%,07):hide%?F%=0
  7343.   protect%=
  7344. init_drag(wi%,ic%,dragtype%)
  7345. !block%=wi%
  7346.  "Wimp_GetWindowState",,block%
  7347. x%=block%!4-block%!20
  7348. y%=block%!16-block%!24
  7349. block%!4=ic%
  7350.  "Wimp_GetIconState",,block%
  7351. block%!8+=x%:minx%=block%!8
  7352. !block%!12+=y%:miny%=block%!12
  7353. !block%!16+=x%:maxx%=block%!16
  7354. !block%!20+=y%:maxy%=block%!20
  7355.  dragtype%=6 
  7356. 5  block%!24=2*minx%-maxx%:block%!36=2*maxy%-miny%
  7357.  block%!24=0:block%!36=ScreenHeight%
  7358. Cblock%!28=0:block%!32=ScreenWidth%:!block%=0:block%!4=dragtype%
  7359.  wi% 
  7360.  mainW%,scrollerW%(Scroller%):
  7361.  dragtype% 
  7362.  design% 
  7363. .      ficon%=ic%:
  7364.  "Wimp_DragBox",,block%
  7365.       
  7366. D      sprite$="file_fff":Filename$=Tag$(Fieldnumber%):Type%=&fff
  7367. A      Start%=
  7368. text(wi%,ic%):End%=Start%+
  7369. text_length(wi%,ic%)
  7370. C      
  7371.  "Wimp_GetPointerInfo",,block%:x1%=!block%:y1%=block%!4
  7372. A      !block%=wi%:block%!4=ic%:
  7373.  "Wimp_GetIconState",,block%
  7374. @      block%!8=x1%:block%!12+=y%:block%!16=x1%:block%!20+=y%
  7375. P      block%!24=0:block%!36=ScreenHeight%:block%!28=0:block%!32=ScreenWidth%
  7376. 7      
  7377.  "DragASprite_Start",&C5,1,sprite$,block%+8
  7378.         
  7379. <    
  7380.  design% 
  7381.  ficon%=ic%:
  7382.  "Wimp_DragBox",,block%
  7383.  mergecomW%:
  7384.  "DragASprite_Start",&C5,1,"file_fff",block%+8  
  7385.  saveW%:
  7386. !  sprite$=
  7387. $SaveSprite%,2,8) 
  7388.  "DragASprite_Start",&C5,1,sprite$,block%+8
  7389.  savesubW%:
  7390.   sprite$=
  7391. $SubSprite%,2,8)
  7392.  "DragASprite_Start",&C5,1,sprite$,block%+8
  7393.  mergebaseW%:
  7394. !  sprite$=
  7395. $MergeSprite%,2,8)
  7396.  "DragASprite_Start",&C5,1,sprite$,block%+8
  7397.  reformW%:
  7398.  "DragASprite_Start",&C5,1,"new_appl",block%+8
  7399.  passW%:
  7400.   sprite$=
  7401. $LogSprite%,2,9)
  7402.  "DragASprite_Start",&C5,1,sprite$,block%+8
  7403.  aclW%:
  7404.   sprite$=
  7405. $AclSprite%,2,8)
  7406.  "DragASprite_Start",&C5,1,sprite$,block%+8
  7407.  "Wimp_DragBox",,block%
  7408. end_drag
  7409.  See PRM 3-197,3-143,3-252
  7410.  "Wimp_GetPointerInfo",,block%
  7411. 3block%!20=block%!12:
  7412.  Destination window handle
  7413. 1block%!24=block%!16:
  7414.  Destination icon handle
  7415. Hblock%!28=block%!0:block%!32=block%!4:
  7416.  x,y co-ords where drag ended
  7417. 8block%!16=1:
  7418.  Send DataSave message to external app.
  7419. 9block%!12=0:
  7420.  Your ref (0, since this is not a reply)
  7421. datasize%=End%-Start%
  7422. 'block%!36=datasize%:block%!40=Type%
  7423.  design% 
  7424.  dragbutt%>0 
  7425. adjust_field(dragbutt%)
  7426.  Filename$<>"" 
  7427. %    $(block%+44)=
  7428. leaf(Filename$)
  7429. ,    !block%=64:
  7430.  Length of message block
  7431. ;    
  7432.  "Wimp_SendMessage",18,block%,block%!20,block%!24
  7433.     ramptr%=Start%
  7434.      
  7435.  "Wimp_CreateMenu",,-1
  7436. encrypt(S$,Z%)
  7437.  I%,R%
  7438. (-12817)
  7439.  I%=1 
  7440. S$,I%,1)>"@" 
  7441.     R%=
  7442. (58)-1
  7443.  R%=58-R%
  7444. 1    
  7445. S$,I%,1)=
  7446. S$,I%,1))-65+R%) 
  7447.  58+65)
  7448. dir(s$)
  7449.  leaf$
  7450. leaf$=
  7451. leaf(s$)
  7452. =leafnamepath$
  7453. leaf(s$)
  7454. s2$=""
  7455. s$)<>"." 
  7456.  s$<>""
  7457.   s2$=
  7458. s$)+s2$
  7459.   s$=
  7460. leafnamepath$=
  7461.  Message handling ----------------------------------------------------
  7462. not_acknowledged
  7463.  block%!16 
  7464.  RAMTransmit failed
  7465.  merging% 
  7466.  moan_err%,
  7467. msg("Err39")
  7468.  DataLoad sent by Powerbase but unacknowledged, hence returned
  7469.  At this point, the message ought to have been sent by us, so check it
  7470.  Very bizarre situation if you get this error (!!)
  7471.  block%!8<>my_ref% 
  7472.  moan_err%,"Reference fields mismatch (msglost/DataLoad)"
  7473.  If transfer marked as temporary, delete scrap file
  7474.  block%!36=-1 
  7475.  "OS_File",6,block%+44
  7476.  moan_err%,
  7477. msg("Err39")
  7478.  &80142:
  7479.  moan_err%,
  7480. msg("Err90")
  7481.  ### Attempt to print directly when no driver installed ###
  7482.  &4AF80:
  7483.  block%!8=my_ref% 
  7484.  "Wimp_StartTask",Run_It$
  7485.  ### No browser loaded to fetch URL ###
  7486. message
  7487.  task%,task$,filename$,wi%,ic%
  7488. ,Atask%=block%!4:your_ref%=block%!8:wi%=block%!20:ic%=block%!24
  7489.  block%!16 
  7490.  Access% 
  7491.  quit%=
  7492. check_record 
  7493.  quit%=
  7494.  DataSave - request by external task to save to Powerbase
  7495.  or to 'save' one Powerbase field into another in same database
  7496.  (dragfield%>0 
  7497.  task%<>mytask%) 
  7498.  present%=7 
  7499.     datasize%=block%!36
  7500.  block%!40 
  7501. 4       
  7502.  &fff,&ff9,&aff,&dfe:
  7503. 5C      block%!0=256:block%!12=your_ref%:block%!16=2:block%!36=-1
  7504. 6*      $(block%+44)="<Wimp$Scrap>"+
  7505. 7B      
  7506.  "Wimp_SendMessage",17,block%,task%:
  7507.  Send DataSaveAck
  7508. 8        
  7509.  DataSaveAck - Powerbase wishes to save to external app.
  7510.  DataSave has been sent & acknowledgement now received
  7511. <2  Type%=block%!40:filename$=
  7512. getstr(block%+44)
  7513.  filename$<>"" 
  7514. ?$      
  7515.  savefunc$="Save object":
  7516. @U      
  7517.  "OS_CLI","Copy "+$database%+"."+$Rf%(Fieldnumber%)+" "+filename$+" ~C~V"
  7518. AO      
  7519.  reformat%>0 
  7520.  filename$=$database%:
  7521. softerror(
  7522. leaf(filename$),200)
  7523.       
  7524. C"      
  7525.  dragfield%>0 
  7526. (-1) 
  7527. DM        $savebuff%="{merge "":Powerbase GetField "+Tag$(dragfield%)+"""}"
  7528. EA        Start%=savebuff%:End%=Start%+
  7529. ($savebuff%):Type%=&fff
  7530.         dragfield%=0
  7531.       
  7532. H,      
  7533. save(filename$,Type%,Start%,End%)
  7534. IL      
  7535. leaf(filename$)<>"Log" 
  7536. write_log(-1,"File saved:",filename$)
  7537. J2      block%!0=256:block%!20=wi%:block%!24=ic%
  7538. K9      block%!12=your_ref%:block%!16=3:
  7539.  Send DataLoad
  7540. L2      
  7541.  "OS_File",5,filename$ 
  7542.  ,,,,block%!36
  7543. M5      block%!40=Type%:$(block%+44)=filename$+
  7544. N/      
  7545.  "Wimp_SendMessage",18,block%,task%
  7546.       my_ref%=block%!8
  7547. P        
  7548.  "Wimp_CreateMenu",,-1
  7549.  DataLoad - request from external app. for Powerbase to load file
  7550. T+  f$=
  7551. getstr(block%+44):type%=block%!40
  7552.  "TaskManager_TaskNameFromHandle",task% 
  7553.  task$
  7554. W@    
  7555.  task$=progname$ 
  7556.  type%=&fff:
  7557. load_to_icon(f$,wi%,ic%)
  7558. XM    
  7559.  One data field dragged to another, not necessarily in same database
  7560. Y&    
  7561.  pasting%:
  7562. from_clipboard(f$)
  7563. get_it_in(f$)
  7564.  block%!8<>0 
  7565.  "OS_CLI","Remove <Wimp$Scrap>"
  7566. ]>  !block%=20:block%!12=your_ref%:block%!16=4:
  7567.  Acknowledge
  7568.  "Wimp_SendMessage",17,block%,task%
  7569.  DataLoadAck - external app. acknowledges data sent by Powerbase
  7570.  ### DataOpen - response to file double click ###
  7571.  block%!40 
  7572.  &7f1,&7f3,&7f4,&7f5:
  7573.  present%=7 
  7574. d4      !block%=20:block%!12=your_ref%:block%!16=4
  7575. e/      
  7576.  "Wimp_SendMessage",17,block%,task%
  7577.       block%!20=-1
  7578. g(      
  7579. get_it_in(
  7580. getstr(block%+44))
  7581. h        
  7582.  &2000:
  7583.  kill% 
  7584.  present%=0 
  7585. k2      
  7586.  ### Is it a Powerbase application? ###
  7587. l*      f$=
  7588. getstr(block%+44)+".Indices"
  7589. m'      
  7590.  "OS_File",5,f$ 
  7591.  d%,,type%
  7592. n!      type%=(type%>>8) 
  7593.  &fff
  7594.       
  7595.  d%=2 
  7596. p6        !block%=20:block%!12=your_ref%:block%!16=4
  7597. q1        
  7598.  "Wimp_SendMessage",17,block%,task%
  7599. r*        
  7600. get_it_in(
  7601. getstr(block%+44))
  7602.       
  7603. t        
  7604.  RAMFetch - Ignore this message if not a simple memory-block save
  7605.  savefunc$ 
  7606.  "Save as text","Save text","Save sprite","Save draw","Save query","Save selection","Save table","Export selected","Clipboard":
  7607. ram_transmit
  7608.  ### Desktop boot file ###
  7609.  "OS_GSTrans","Run <PBase$Dir>",block%+&100,&f00 
  7610.  ,bootcmd$
  7611. #block%!20,bootcmd$
  7612.  ### Claim entity; an app has claimed input focus or clipboard ###
  7613.  (block%!20) 
  7614.  %100 
  7615.  clip%=
  7616.  ### Data request; an application wants to paste from clipboard ###
  7617.  (block%!36) 
  7618.  %100 
  7619. c    block%!12=your_ref%:block%!36=
  7620. (scratchpad$)+1:block%!40=&fff:$(block%+44)="Clipboard"+
  7621. 9    block%!16=1:
  7622.  "Wimp_SendMessage",18,block%,task%
  7623.     my_ref%=block%!8
  7624.  &502:
  7625. help_message(task%,your_ref%,block%!32,block%!36)
  7626.  &400C0:
  7627. message_menu_select
  7628.  &400C1:
  7629.  ### Mode change ###
  7630. getscreensize(ScreenWidth%,ScreenHeight%,Vpix%)
  7631. load_sprites
  7632.  &400CC:
  7633.  block%!20=mainW% 
  7634.  iconise%=
  7635.  &400CF:
  7636.  ### Desktop font changed ###
  7637.  Desktopfont%>0 
  7638.  Desktopfont%<>block%!20 
  7639.  Desktopfont%=block%!20:
  7640. softerror("",146)
  7641. ram_transmit
  7642.  datasize%>block%!24 
  7643.  tosend%=block%!24 
  7644.  tosend%=datasize%
  7645.  "Wimp_TransferBlock",mytask%,ramptr%,block%!4,block%!20,tosend%
  7646. block%!24=tosend%
  7647. datasize%-=tosend%
  7648. ramptr%+=tosend%
  7649. #block%!12=your_ref%:block%!16=7
  7650.  "Wimp_SendMessage",18+(datasize%=0),block%,block%!4
  7651. my_ref%=block%!8
  7652. load_to_icon(f$,wi%,ic%)
  7653.  L%,F,len%,F%,ok%,V%,b$,butt%,I%
  7654.  ic%<0 
  7655. dragfield%=0
  7656. buffer_length(wi%,ic%)
  7657.  "OS_File",5,f$ 
  7658.  ,,,,len%
  7659.  len%>255 
  7660.  wi%=mainW% 
  7661. )  F%=
  7662. get_field(ic%):V%=chartype%(F%)
  7663.  ic% 
  7664.  2=0:ok%=0
  7665.  V%=36 
  7666.  V%=39:
  7667. 1    L%=
  7668. blob_path(
  7669. ,$database%,REC%,F%,36,b$)
  7670. -    
  7671.  "OS_CLI","Copy "+f$+" "+b$+" ~C~V"
  7672.     ok%=2
  7673. A    
  7674.  V%=39 
  7675. show_text_block(F%,REC%):
  7676. redraw_icon(wi%,ic%)
  7677.  vtype$(V%)="E":ok%=1
  7678. /    
  7679.  vtype$(V%)="L":ok%=1:ScrollChanged%=
  7680. =  !block%=wi%:block%!4=ic%:
  7681.  "Wimp_GetIconState",,block%
  7682. $  butt%=((block%!25)>>4) 
  7683.  %1111
  7684.  butt%=14 
  7685.  butt%=15 
  7686.  ok%=1
  7687.  I%=0 
  7688.  Scrollnum%-1
  7689. $    
  7690.  wi%=scrollerW%(I%) 
  7691.  ok%=3
  7692.  I%  
  7693.  ok% 
  7694. softerror("",213)
  7695.  1,3:
  7696.  "OS_File",255,f$,savebuff%
  7697.   savebuff%?len%=13
  7698. text(wi%,ic%)=
  7699. $savebuff%,L%)
  7700. set_caret(0,wi%,ic%)
  7701. redraw_icon(wi%,ic%)
  7702.  ok%=3 
  7703.  ScrollChanged%=
  7704. message_menu_select
  7705.  P%,Q%,I%
  7706. keyfunc$=""
  7707. 5handle%=block%!20:xmin%=block%!24:ymax%=block%!28
  7708.  "Wimp_DecodeMenu",,menuhandle%,block%+32,choices%
  7709. text(saveW%,4)="":
  7710. shade(saveW%,4,
  7711. deselect(saveW%,4)
  7712.  I%=1 
  7713.   Q%=
  7714. $choices%,".",P%+1)
  7715. &  choice$(I%)=
  7716. $choices%,P%,Q%-P%)
  7717.   P%=Q%+1
  7718.  menuhandle% 
  7719.  iconbarM%:
  7720.  choice$(1) 
  7721.  "New database":
  7722.     $SaveName%="!DataBase"
  7723. 1    $SaveSprite%="snew_appl;Pptr_hand,4,0;R2"
  7724.     savefunc$=choice$(1)
  7725.  mainM%:
  7726.  choice$(2) 
  7727.  "Save as list":
  7728. 3    $SaveName%=$database%+".PrintJobs.TextList"
  7729. 1    $SaveSprite%="sfile_fff;Pptr_hand,4,0;R2"
  7730.     savefunc$=choice$(2)
  7731.  "Save as CSV":
  7732. F    $SaveName%=$database%+".PrintJobs."+
  7733. set_up_save_box(1)+"file"
  7734. -    savefunc$=choice$(2):writescroller%=
  7735.  choice$(1) 
  7736.  "Print":
  7737.  choice$(2) 
  7738.       
  7739.  "Save query":
  7740. 1      $SaveName%=$database%+".PrintRes.Query"
  7741. 3      $SaveSprite%="sfile_7f4;Pptr_hand,4,0;R2"
  7742. *      $
  7743. text(saveW%,4)="Default query"
  7744. 6      
  7745. shade(saveW%,4,
  7746. deselect(saveW%,4)      
  7747.       
  7748.  "Save selection":
  7749. 5      $SaveName%=$database%+".PrintRes.Selection"
  7750. 3      $SaveSprite%="sfile_7f3;Pptr_hand,4,0;R2"
  7751. .      $
  7752. text(saveW%,4)="Default selection"
  7753. 0      
  7754. shade(saveW%,4,
  7755. deselect(saveW%,4)
  7756.        
  7757.  "Display selection":
  7758. J      fieldsM%=
  7759. field_menu(items%,2+(printorder$="")):handle%=fieldsM%
  7760. /      item%=printM%+28+9*24:item%!4=handle%
  7761.         
  7762.     savefunc$=choice$(2)
  7763. 4    
  7764.  "Validation":
  7765. make_table_menu(TabsLoaded$)
  7766. "    
  7767.  "Index":
  7768. make_index_menu
  7769.  "Copy as":
  7770.     $SaveName%="!NewName"
  7771. 1    $SaveSprite%="snew_appl;Pptr_hand,4,0;R2"
  7772.     savefunc$=choice$(1)
  7773.  "Export selected":
  7774. 3    $SaveName%=$database%+".PrintJobs.Selected"
  7775. 1    $SaveSprite%="sfile_fff;Pptr_hand,4,0;R2"
  7776.     savefunc$=choice$(1)
  7777.  designM%:
  7778.  choice$(1) 
  7779.  "Save form file":
  7780. %    $SaveName%=$database%+".Form"
  7781. 1    $SaveSprite%="sfile_7f2;Pptr_hand,4,0;R2"
  7782.     savefunc$=choice$(1)
  7783.  tableM%:
  7784.  choice$(1) 
  7785.  "Save":
  7786. 4    $SaveName%=$database%+".ValTables."+$tableM%
  7787. 1    $SaveSprite%="sfile_7f1;Pptr_hand,4,0;R2"
  7788.     savefunc$="Save table"
  7789.  "Save as CSV":
  7790. H    $SaveName%=$database%+".PrintJobs."+
  7791. set_up_save_box(1)+$tableM%
  7792. 3    savefunc$="Save table as CSV":writetable%=
  7793.  listM%:
  7794.  choice$(1) 
  7795.  "Save as text":
  7796.     $SaveName%=TextName$
  7797. 1    $SaveSprite%="sfile_fff;Pptr_hand,4,0;R2"
  7798.     savefunc$=choice$(1)
  7799.  "Wimp_CreateSubMenu",,handle%,xmin%,ymax%
  7800. help_message(task%,your_ref%,wi%,ic%)
  7801.  T%,C%
  7802.  T%=0 
  7803.  LastTable%
  7804.  wi%=tableW%(T%) 
  7805.  Tablenumber%=T%
  7806. !Scroller%=
  7807. scroller_num2(wi%)
  7808.  wi% 
  7809. help("HelpPbase")
  7810.  bannerW%:
  7811.  Do nothing
  7812.  listW%:
  7813. help("HelpList")
  7814.  tableW%(Tablenumber%):
  7815. help("HelpTable")
  7816.  scrollerW%(Scroller%):
  7817. help("HelpScroller")
  7818.  mainW%:
  7819. '-    
  7820.  ic%<0:
  7821.  present%=7 
  7822. help("main?")
  7823.  (ic% 
  7824.  2)=1:
  7825.     field%=(ic%+1) 
  7826.     C%=chartype%(field%)
  7827.  hide%?field%=0 
  7828.       s$="main"+
  7829. -G      
  7830. phone(field%) 
  7831.  s$+=","+
  7832. msg("phone,"+
  7833. (DialDelay% 
  7834.  100))
  7835. .*      
  7836.  C%=5 
  7837.  s$+="_"+
  7838. (len%(field%))
  7839. /;      
  7840.  mandatory%?field%=1 
  7841.  s$+=","+
  7842. msg("mandatory")
  7843. 02      
  7844.  C%>67 
  7845.  C%<79 
  7846.  s$+=","+
  7847. msg("update")
  7848. 1.      
  7849.  C%>8 
  7850.  C%<32 
  7851.  s$="keypad"+
  7852. (C%-9)
  7853. 26      
  7854.  present%=7 
  7855. help(s$) 
  7856. help("maindrag")
  7857. 3        
  7858.  pselectW%:
  7859. help("Pselect")
  7860.  infoW%:
  7861. help("info"+
  7862. (ic%))
  7863.  miscW%:
  7864. help("misc"+
  7865. (ic%))
  7866.  relateW%:
  7867. help("relate"+
  7868. (ic%))
  7869.  accessW%:
  7870. help("access"+
  7871. (ic%))
  7872.  keypadW%:
  7873. help("keypad"+
  7874. (ic%))
  7875.  searchW%:
  7876. help("search"+
  7877. (ic%))
  7878.  filterW%:
  7879. help("filter"+
  7880. (ic%))
  7881.  queryW%:
  7882. help("query"+
  7883. (ic%))
  7884.  moveW%:
  7885. help("move"+
  7886. (ic%))
  7887.  calcW%:
  7888. help("calc"+
  7889. (ic%))
  7890.  sizeW%:
  7891. help("size"+
  7892. (ic%))
  7893.  matchW%:
  7894. help("match"+
  7895. (ic%))
  7896.  tabcreateW%:
  7897. help("tabcreate"+
  7898. (ic%))
  7899.  changeW%:
  7900. help("change"+
  7901. (ic%))
  7902.  passW%:
  7903. help("passwd"+
  7904. (ic%))
  7905.  aclW%:
  7906. help("acl"+
  7907. (ic%))
  7908.  saveW%:
  7909. help("save"+
  7910. (ic%))
  7911.  savesubW%:
  7912. help("savesub"+
  7913. (ic%))
  7914.  printW%:
  7915. help("print"+
  7916. (ic%))
  7917.  printerW%:
  7918. help("printer"+
  7919. (ic%))
  7920.  createW%:
  7921. help("create"+
  7922. (ic%))
  7923.  scrollW%:
  7924. help("scroll")
  7925.  prefsW%:
  7926. help("prefs"+
  7927. (ic%))
  7928.  csvW%:
  7929. help("csv"+
  7930. (ic%))
  7931.  fkeyW%:
  7932. help("fkey"+
  7933. (ic%))
  7934.  helpW%:
  7935. help("help"+
  7936. (ic%))
  7937.  keyW%:
  7938. help("key"+
  7939. (ic%))
  7940.  colW%:
  7941. help("col"+
  7942. (ic%))
  7943.  linkW%:
  7944. help("link"+
  7945. (ic%))
  7946.  reformW%:
  7947. help("reform"+
  7948. (ic%))
  7949.  mergebaseW%:
  7950. help("mergebase"+
  7951. (ic%))
  7952.  mergeW%:
  7953. help("merge"+
  7954. (ic%))
  7955.  gridW%:
  7956. help("grid"+
  7957. (ic%))
  7958.  markW%:
  7959. help("mark"+
  7960. (ic%))
  7961.  extracalcW%:
  7962. help("extracalcs"+
  7963. (ic%))
  7964.  mergecomW%:
  7965. help("mergecom"+
  7966. (ic%))
  7967. menu_help
  7968. menu_help
  7969.  ptr%,ch$,choice$
  7970.  "Wimp_GetMenuState",,menhelpblock%
  7971. ptr%=0
  7972.  menhelpblock%!ptr%<>-1
  7973.   ch$=
  7974. (menhelpblock%!ptr%)
  7975. (ch$)=2 
  7976.  ch$+="_"
  7977.   choice$+=ch$
  7978.   ptr%+=4
  7979.  menuhandle% 
  7980.  iconbarM%:
  7981. help("iconbar"+choice$)
  7982.  mainM%:
  7983. help("mainmen"+choice$)
  7984.  designM%:
  7985. help("design"+choice$)
  7986.  keystrokeM%:
  7987. help("keystroke"+choice$)
  7988.  mergecomM%:
  7989. help("mergemen"+choice$)
  7990. help(token$)
  7991. !block%=256
  7992. block%!4=task%
  7993. block%!12=your_ref%
  7994. block%!16=&503
  7995. $(block%+20)=
  7996. msg(token$)
  7997.  "Wimp_SendMessage",17,block%,block%!4
  7998.  File saving --------------------------------------------------------
  7999. export_selected(Form$)
  8000.  I%,F%,P%,F$
  8001. ~GSHsaveptr%=
  8002. extend_named_sliding_block(saveanchor%,Length%+fields%)
  8003. P%=SHsaveptr%
  8004.  I%=1 
  8005. (Form$)-1 
  8006.   F%=
  8007. fnum(
  8008. Form$,I%,2))
  8009.   F$=$Rf%(F%)+
  8010.   $P%=F$:P%+=
  8011. (Start%=SHsaveptr%:End%=P%:Type%=&fff
  8012. scrap_block(saveanchor%)
  8013. save_all_tables
  8014.  name$
  8015.  "Hourglass_On"
  8016. Tablenumber%=0
  8017.  Tablenumber%<=LastTable%
  8018.    name$=table$(Tablenumber%)
  8019. name$,1)<>"*" 
  8020. )    f$=$database%+".ValTables."+name$
  8021. c    t$=
  8022. table_info(Tablenumber%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  8023. E    Start%=SHtabptr%(Tablenumber%):End%=Start%+offset%+Rows%*Rec%
  8024. "    
  8025. save(f$,&7f1,Start%,End%)
  8026.   Tablenumber%+=1
  8027.  "Hourglass_Percentage",Tablenumber%*100 
  8028.  (LastTable%+1)
  8029.  "Hourglass_Off"
  8030. save(f$,ft%,start%,end%)
  8031.  leaf$,L$,R$,S$,swap%
  8032. leaf$=
  8033. leaf(f$)
  8034. f$,9)="Powerbase" 
  8035. softerror("",129):
  8036.  writingtext% 
  8037.  ft% 
  8038.  savefunc$="Copy as" 
  8039. $    
  8040. leaf($database%))=0 
  8041. 8      
  8042.  "OS_CLI","Copy "+$database%+" "+f$+" ~C~VR"
  8043. -      
  8044. copy_database_spritefile(f$,leaf$)
  8045.       
  8046. softerror("",183)
  8047.         
  8048.         
  8049.  "OS_File",8,f$
  8050. $    
  8051.  "OS_File",8,f$+".Indices"
  8052. &    
  8053.  "OS_File",8,f$+".ValTables"
  8054. "    
  8055.  "OS_File",8,f$+".Menus"
  8056. %    
  8057.  "OS_File",8,f$+".PrintRes"
  8058. &    
  8059.  "OS_File",8,f$+".PrintJobs"
  8060. &    
  8061.  "OS_File",8,f$+".UserFuncs"
  8062. K    
  8063.  "OS_CLI","Copy <PBase$Dir>.Resources.Temp.!Run "+f$+".!Run ~C~V"
  8064. F    
  8065.  "OS_CLI","Copy <PBase$Dir>.Resources.Info "+f$+".Data ~C~V"
  8066. +    
  8067. copy_database_spritefile(f$,leaf$)
  8068.       
  8069.  reformat%>0:
  8070.       $Reformatted%=f$
  8071.       
  8072.  reformat% 
  8073.         
  8074. D        
  8075.  "OS_CLI","Copy "+$database%+".Form "+f$+".Form ~C~VF"
  8076.         
  8077. get_it_in(f$)
  8078.          
  8079. open_window(mainW%)
  8080.         
  8081. complete(6)
  8082. ;        
  8083. selected(reformW%,11) 
  8084. softerror("",160)
  8085.         
  8086. >        
  8087.  "OS_CLI","Copy "+$Newform%+" "+f$+".Form ~C~VF"
  8088.         
  8089. do_reformat
  8090.       
  8091. D      
  8092.  mergefiles%:
  8093. merge_files($
  8094. text(mergebaseW%,3),f$,file%)
  8095. &      
  8096.  export%:
  8097. export_subset(f$)
  8098.       
  8099.  csvconv%:
  8100.       
  8101.  SHformptr%=0 
  8102. H        SHformptr%=
  8103. extend_named_sliding_block(formanchor%,SHclaim%)
  8104.         Fptr%=SHformptr%
  8105. $        fields%=0:Fieldnumber%=0
  8106. $        fields%=
  8107. get_form(Fptr%)
  8108.       
  8109.       
  8110.       
  8111. lit(iconbarM%,1,
  8112.       
  8113. get_it_in(f$)
  8114.       
  8115. open_window(mainW%)
  8116.       
  8117.  SHformptr%=0 
  8118. H        SHformptr%=
  8119. extend_named_sliding_block(formanchor%,SHclaim%)
  8120.         Fptr%=SHformptr%
  8121. $        fields%=0:Fieldnumber%=0
  8122.       
  8123.         
  8124. close_window(saveW%)
  8125.  &7f2:
  8126. save_form(f$)
  8127.  &7f5:
  8128. save_options(printW%,printerW%,f$)
  8129.  &dfe:
  8130. 6    
  8131.  writetable%:
  8132. table_to_csv(Tablenumber%,f$)  
  8133. 7    
  8134.  writescroller%:
  8135. scroller_to_csv(Scroller%,f$)
  8136. 9    
  8137. (-1) 
  8138. write_csv(f$,REC%) 
  8139. write_csv(f$,-1)
  8140. $    
  8141.  leaf$="Log" 
  8142.  leaf$="Acl":
  8143. -    L$="Set "+leaf$+"$Dir "+leafnamepath$
  8144. 3    
  8145.  leaf$="Log" 
  8146. close_log("<Log$Dir>.Log")
  8147. G    
  8148.  leaf$="Acl" 
  8149.  acl%=
  8150.  "OS_CLI","Rename <Acl$Dir>.Acl "+f$
  8151.  "OS_CLI",L$
  8152. E    
  8153.  "OS_CLI","Rename "+$database%+".!Run "+$database%+".!Temp"
  8154. 9    F=
  8155. ($database%+".!Temp"):F1=
  8156. ($database%+".!Run")
  8157.         
  8158.       S$=
  8159.       
  8160.         
  8161. S$,7)="Set Log":
  8162. 5        
  8163.  leaf$="Log" 
  8164. #F1,L$:swap%=
  8165. #F1,S$
  8166.         
  8167. S$,7)="Set Acl":
  8168. 5        
  8169.  leaf$="Acl" 
  8170. #F1,L$:swap%=
  8171. #F1,S$
  8172.          
  8173. S$,3)="Run":R$=S$
  8174.         
  8175. #F1,S$
  8176.       
  8177.  swap% 
  8178. #F1,L$
  8179. #F1,R$
  8180. &    
  8181. close_file(F):
  8182. close_file(F1)
  8183. /    
  8184.  "OS_File",18,$database%+".!Run",&feb
  8185. 1    
  8186.  "OS_CLI","Remove "+$database%+".!Temp"
  8187. G    
  8188.  leaf$="Log" 
  8189. set_icon(passW%,16,
  8190. mouse(0,0,4,passW%,4)  
  8191.  savetofile%:
  8192.     texthandle%=
  8193.      
  8194.  "OS_File",18,f$,Type%
  8195. I    writingtext%=
  8196.  Make sure we can't re-enter this PROC until done
  8197. "    
  8198. do_it(Search$,displayed%)
  8199.     writingtext%=
  8200. +    
  8201.  "OS_File",10,f$,ft%,,start%,end%
  8202. !    
  8203. scrap_block(saveanchor%)
  8204. ramwarn%=
  8205. getstr(p%)
  8206.  ?p%>31
  8207.   p$+=
  8208. (?p%)
  8209.   p%+=1
  8210.  Validation tables ----------------------------------------------------
  8211. tabcreate_click(wi%,ic%,b%)
  8212.  I%,L%,head$,tablen%,width$,max%,row%,y%,headlen%,col%,z%,lim%
  8213.  "Hourglass_Smash":
  8214. wimp_error(
  8215.  (b% 
  8216.  %111)=4 
  8217.  z%=1 
  8218.  z%=-1
  8219.  %111 
  8220.  1,4:
  8221.  ic% 
  8222.     row%=
  8223. ($tabcol%)
  8224.  row%>MaxCols% 
  8225. &      
  8226. softerror(
  8227. (MaxCols%+1),42)
  8228.       row%=MaxCols%
  8229.       $tabcol%=
  8230. (row%)
  8231.       
  8232. redraw_icon(wi%,8)
  8233.          
  8234. !%    
  8235. set_caret(0,scrollW%,row%*2)
  8236. ")    
  8237.  row%<3 
  8238.  y%=0 
  8239.  y%=-(row%-2)*44
  8240. #9    !block%=scrollW%:
  8241.  "Wimp_GetWindowState",,block%
  8242. $1    block%!24=y%:
  8243.  "Wimp_OpenWindow",,block%
  8244.  13,14:
  8245. &@    col%=
  8246. get_icon_cols(wi%,ic%):fg%=col% 
  8247.  16:bg%=col% 
  8248. 'I    
  8249. selected(wi%,11) 
  8250.  fg%=(fg%+z%+16) 
  8251.  bg%=(bg%+z%+16) 
  8252. (*    
  8253. set_icon_cols(wi%,ic%,fg%+bg%*16)
  8254. *J    start$="new"+
  8255. get_icon_cols(wi%,13)*256+
  8256. get_icon_cols(wi%,14))
  8257. +C    name$=$
  8258. text(wi%,0):
  8259.  name$="" 
  8260.  moan_err%,
  8261. msg("Err103")
  8262. ,E    Rows%=
  8263. text(wi%,1)):
  8264.  Rows%=0 
  8265.  moan_err%,
  8266. msg("Err104")
  8267.     LastTable%+=1
  8268.     Tablenumber%=LastTable%
  8269. /0    table$(Tablenumber%)=
  8270. name$,NameLength%)
  8271.     tablen%=
  8272. (start$)+1
  8273.     tablen%+=
  8274. (Rows%))+1
  8275.  "Hourglass_On"
  8276.     TabFields%=0
  8277. 4,    
  8278. text(scrollW%,TabFields%*2)<>""
  8279. 5.      width$=$
  8280. text(scrollW%,TabFields%*2)
  8281.       tablen%+=
  8282. (width$)+1
  8283. 7,      tabfieldlen%(TabFields%)=
  8284. (width$)
  8285. 8*      Rec%+=tabfieldlen%(TabFields%)+1
  8286. 9/      head$=$
  8287. text(scrollW%,TabFields%*2+1)
  8288. :W      
  8289. (head$)>tabfieldlen%(TabFields%) 
  8290.  LastTable%-=1:
  8291.  moan_err%,
  8292. msg("Err38")
  8293.       headlen%+=
  8294. (head$)+1
  8295.       TabFields%+=1
  8296. =        
  8297.     TabFields%-=1
  8298. ?3    
  8299.  TabFields%<0 
  8300.  moan_err%,
  8301. msg("Err112")
  8302. @9    tablen%+=(
  8303. (TabFields%))+1+headlen%+Rows%*Rec%)
  8304. AM    SHtabptr%(Tablenumber%)=
  8305. claim_page(tabanchor%(Tablenumber%),tablen%)
  8306. B)    SHtabptr%=SHtabptr%(Tablenumber%)
  8307. C4    $SHtabptr%=start$:SHtabptr%+=
  8308. ($SHtabptr%)+1
  8309. D6    $SHtabptr%=
  8310. (Rows%):SHtabptr%+=
  8311. ($SHtabptr%)+1
  8312. E;    $SHtabptr%=
  8313. (TabFields%):SHtabptr%+=
  8314. ($SHtabptr%)+1
  8315.  I%=0 
  8316.  TabFields%
  8317. GC      $SHtabptr%=
  8318. (tabfieldlen%(I%)):SHtabptr%+=
  8319. ($SHtabptr%)+1
  8320.  I%=0 
  8321.  TabFields%
  8322. JG      $SHtabptr%=$
  8323. text(scrollW%,I%*2+1):SHtabptr%+=
  8324. ($SHtabptr%)+1
  8325.  row%=1 
  8326.  Rows%
  8327.       
  8328.  I%=0 
  8329.  TabFields%
  8330. N7        $SHtabptr%="":SHtabptr%+=tabfieldlen%(I%)+1
  8331.       
  8332.  row%
  8333.  "Hourglass_Off"
  8334. R%    
  8335. show_table(Tablenumber%,0,0)
  8336. S"    
  8337. text(wi%,2)="Modify" 
  8338. T:      
  8339. write_back_to_table(OldTable%,Tablenumber%,wi%)
  8340. U'      table$(OldTable%)=
  8341. "*"+name$)
  8342. V       P%=
  8343. TabsLoaded$,name$)
  8344. W5      
  8345. TabsLoaded$,P%,
  8346. (name$))=table$(OldTable%)
  8347. X'      
  8348. close_it(tableW%(OldTable%))
  8349. Y        
  8350.     TabsLoaded$+=","+name$
  8351. [%    
  8352. make_table_menu(TabsLoaded$)
  8353. \1    
  8354. close_it(wi%):
  8355. restore_caret(starthere%)
  8356. asterisk(
  8357. ^K    
  8358. close_it(wi%):
  8359. restore_caret(returnto%):$
  8360. text(wi%,2)="Create"
  8361. renew_tables
  8362. display(key%,addr)
  8363. modify_table(T%,wi%)
  8364.  I%,Rows%,Rec%,L%,TabFields%,head$,cols%
  8365. gUt$=
  8366. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  8367. text(wi%,2)="Modify"
  8368. text(wi%,0)=table$(T%)
  8369. text(wi%,1)=
  8370. (Rows%)
  8371. $tabcol%="0"
  8372.  I%=0 
  8373.  MaxCols%*2+1
  8374. text(scrollW%,I%)=""
  8375.  I%=0 
  8376.  TabFields%
  8377. p/  $
  8378. text(scrollW%,I%*2)=
  8379. (tabfieldlen%(I%))
  8380. qI  $
  8381. text(scrollW%,I%*2+1)=$
  8382. text(tableW%(T%),Rows%*(TabFields%+1)+I%)
  8383.  colours$="" 
  8384.  colours$="2807"
  8385. cols%=
  8386. ("&"+colours$)
  8387. set_icon_cols(wi%,13,cols% 
  8388.  256)
  8389. set_icon_cols(wi%,14,cols% 
  8390.  256)
  8391. OldTable%=T%
  8392. open_window(wi%):
  8393. set_caret(0,wi%,0)
  8394. redraw(wi%):
  8395. redraw(scrollW%)
  8396. write_back_to_table(old%,new%,wi%)
  8397.  row%,column%,P%,N%,I%,ic%
  8398. ~ct$=
  8399. table_info(old%,oldRows%,oldTabFields%,Rec%,tabfieldlen%(),oldoffset%,oldheading%,colours$)
  8400. P%=oldheading%
  8401. tabhead$()=""
  8402.  I%=0 
  8403.  oldTabFields%
  8404. %  tabhead$(I%,0)=$P%:P%+=
  8405. ($P%)+1
  8406.  I%=0 
  8407.  TabFields%
  8408. ,  tabhead$(I%,1)=$
  8409. text(scrollW%,2*I%+1)
  8410.  oldRows%<=Rows% 
  8411.  N%=oldRows%-1 
  8412.  N%=Rows%-1
  8413.  "Hourglass_On"
  8414.  row%=0 
  8415. -  P%=SHtabptr%(old%)+oldoffset%+row%*Rec%
  8416.  column%=0 
  8417.  oldTabFields%
  8418.     I%=-1
  8419.         
  8420.       I%+=1
  8421. <    
  8422.  tabhead$(I%,1)=tabhead$(column%,0) 
  8423.  I%>TabFields%
  8424.  I%<=TabFields% 
  8425. $      ic%=row%*(TabFields%+1)+I%
  8426. K      $
  8427. text(tableW%(new%),ic%)=
  8428. buffer_length(tableW%(new%),ic%))
  8429. %      P%+=tabfieldlen%(column%)+1
  8430.         
  8431.  column%
  8432.  row%
  8433.  "Hourglass_Off"
  8434. text(wi%,2)="Create"
  8435. redraw(tableW%(new%))
  8436. clear_table(T%)
  8437. confirm(
  8438. msg("Err47"))=
  8439.  R%,F%,ind%,Rows%,TabFields%,start%,Rec%
  8440. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  8441. %start%=SHtabptr%(T%)+offset%-Rec%
  8442.  R%=1 
  8443.  Rows%
  8444.   ind%=start%+R%*Rec%
  8445.  F%=0 
  8446.  TabFields%
  8447. )    $ind%="":ind%+=tabfieldlen%(F%)+1
  8448. redraw(tableW%(T%))
  8449. asterisk(
  8450. show_table(T%,x%,y%)
  8451.  ind%,start%,dflags%,hflags%,c%,I%,pos%,p$,t$,B%,tablefield%,offset%,heading%,colours$,width%,OK%
  8452. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  8453. ;NewTab%=(t$="
  8454. "):extra%=-NewTab%*(Rows%*(TabFields%+1))
  8455.  T%<0 
  8456. /tablen%=
  8457. sliding_block_size(tabanchor%(T%))
  8458.  SHundoptr%(T%)<=0 
  8459.  SHundoptr%(T%)=
  8460. extend_named_sliding_block(undoanchor%(T%),tablen%)
  8461.  "Wimp_TransferBlock",mytask%,SHtabptr%(T%),mytask%,SHundoptr%(T%),tablen%
  8462.  tableW%(T%)>0 
  8463. text(tableW%(T%),0) 
  8464. %    
  8465.  SHtabptr%(T%)+offset%:OK%=
  8466. B    
  8467. :!block%=tableW%(T%):
  8468.  "Wimp_DeleteWindow",,block%:OK%=
  8469.  OK% 
  8470. open_window(tableW%(T%))
  8471.   name$=table$(T%)
  8472.   $Tablename%=name$
  8473.   $tableM%=name$
  8474.    ind%=SHtabptr%(T%)+offset%
  8475.  "Wimp_OpenTemplate",,"<Pbase$Dir>.Resources.Templates"
  8476.   B%=buff%
  8477.  "Wimp_LoadTemplate",,block%,buff%,endbuff%,-1,"table",0 
  8478.  ,,buff%
  8479.  NewTab% 
  8480. (name$)+1 
  8481. (t$)+1
  8482.   buff%+=L%:block%!80=L%
  8483.  "Wimp_CloseTemplate"
  8484. %  block%!28=block%!28 
  8485.  &AFFFFFFF
  8486. 1    
  8487.  (Rec%+TabFields%+9)*16<1136 
  8488.  Rows%<16:
  8489. C    
  8490.  (Rec%+TabFields%+9)*16<1136:block%!28=block%!28 
  8491.  (1<<28)
  8492. 0    
  8493.  Rows%<16:block%!28=block%!28 
  8494.  (1<<30)
  8495. 1    
  8496. :block%!28=block%!28 
  8497.  ((1<<28)+(1<<30))
  8498.  "Wimp_CreateWindow",,block% 
  8499.  tableW%(T%)
  8500. R  TabTitle%(T%)=block%!72:
  8501.  NewTab% 
  8502.  $TabTitle%(T%)=name$ 
  8503.  $TabTitle%(T%)=t$
  8504.  "Hourglass_On"
  8505.  colours$="" 
  8506.  colours$="2807"
  8507.   cols%=
  8508. ("&"+colours$)
  8509. +  hflags%=&0000A535+((cols% 
  8510.  256)<<24)
  8511. +  dflags%=&0000A535+((cols% 
  8512.  256)<<24)
  8513.  row%=1 
  8514.  Rows%
  8515.     pos%=72
  8516.  I%=0 
  8517.  TabFields%
  8518. 8      width%=
  8519. guess_width(tabfieldlen%(I%),2,width%)
  8520. z      R%=
  8521. create_icon(0,tableW%(T%),pos%,-row%*44-4+44*NewTab%,width%+2,48,dflags%,"",ind%,writep%,tabfieldlen%(I%)+1)
  8522.       pos%+=width%
  8523. "      ind%+=tabfieldlen%(I%)+1
  8524. 2    
  8525.  "Hourglass_Percentage",row%*100 
  8526.  Rows%
  8527.  row%
  8528.  NewTab% 
  8529.     pos%=72
  8530.  I%=0 
  8531.  TabFields%
  8532. 8      width%=
  8533. guess_width(tabfieldlen%(I%),2,width%)
  8534. g      R%=
  8535. create_icon(0,tableW%(T%),pos%,-48,width%+2,48,hflags%,"",heading%,-1,tabfieldlen%(I%)+1)
  8536.       pos%+=width%
  8537. "      heading%+=
  8538. ($heading%)+1
  8539.  "Hourglass_Off"
  8540.   p$=printrel$(T%)
  8541.  p$<>"" 
  8542.  I%=1 
  8543. (p$) 
  8544. "      tablefield%=
  8545. p$,I%,3))
  8546. 1      
  8547. select(tableW%(T%),tablefield%+extra%)
  8548. ,  width%=
  8549. guess_width(Rec%,2,width%)+112
  8550. /  !block%=0:block%!4=-Rows%*44-4+44*NewTab%
  8551. !  block%!8=width%:block%!12=0
  8552.  "Wimp_SetExtent",tableW%(T%),block%
  8553.   !block%=tableW%(T%)
  8554.  "Wimp_GetWindowState",,block%
  8555.  x%=0 
  8556.  x%=(ScreenWidth%-width%) 
  8557.   block%!4=x%
  8558.   block%!12=block%!4+width%
  8559.  Rows%<20 
  8560. 2    
  8561.  y%=0 
  8562.  y%=ScreenHeight% 
  8563.  2-(Rows%*18+2)
  8564.     block%!8=y%
  8565. 0    block%!16=block%!8+Rows%*44+4-44*NewTab%
  8566.         
  8567. )    
  8568.  y%=0 
  8569.  y%=ScreenHeight% 
  8570.  2-362
  8571.     block%!8=y%
  8572. -    block%!16=block%!8+44*20+4-44*NewTab%
  8573.  "Wimp_OpenWindow",,block%
  8574. redraw(tableW%(T%))
  8575.  Access% 
  8576. set_caret(0,tableW%(T%),0)
  8577. renew_tables
  8578.  T%=0 
  8579.  MaxTabs%
  8580. #  SHtabptr%(T%)=!tabanchor%(T%)
  8581. %  SHundoptr%(T%)=!undoanchor%(T%)
  8582.  tableW%(T%)>0 
  8583.     !block%=tableW%(T%)
  8584. (    
  8585.  "Wimp_GetWindowState",,block%
  8586. G    
  8587.  ((block%!32) 
  8588.  (1<<16))>0 
  8589. show_table(T%,block%!4,block%!8)
  8590. restore_table(T%)
  8591. /tablen%=
  8592. sliding_block_size(tabanchor%(T%))
  8593.  "Wimp_TransferBlock",mytask%,SHundoptr%(T%),mytask%,SHtabptr%(T%),tablen%
  8594. redraw(tableW%(T%))
  8595. restore_tabfield
  8596.  source%,dest%
  8597.  "Wimp_GetCaretPosition",,block%:wi%=!block%:ic%=block%!4
  8598.  wi%=tableW%(Tablenumber%) 
  8599. ,  dest%=
  8600. text(tableW%(Tablenumber%),ic%)
  8601. D  source%=SHundoptr%(Tablenumber%)+dest%-SHtabptr%(Tablenumber%)
  8602.   $dest%=$source%
  8603. redraw_icon(tableW%(Tablenumber%),ic%)
  8604. sort_table(T%,field%)
  8605.  tablen%,ind%,Rec%,Rows%,row%,TabFields%,pos%,dest%
  8606. 'Ytitle$=
  8607. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  8608. (,pos%=
  8609. table_field(field%,tabfieldlen%())
  8610. )(ind%=SHtabptr%(T%)+offset%-Rec%+pos%
  8611.  row%=0 
  8612.  Rows%-1
  8613.   ind%+=Rec%
  8614.   block%!(row%*4)=ind%
  8615.  $ind%="" 
  8616.  $ind%="~"
  8617.  row%
  8618.  "OS_HeapSort",Rows%,block%,4
  8619. 0?SHsort%=
  8620. extend_named_sliding_block(sortanchor%,Rows%*Rec%)
  8621. dest%=SHsort%-Rec%
  8622.  row%=0 
  8623.  Rows%-1
  8624. 3&  ind%=block%!(row%*4):dest%+=Rec%
  8625.  $ind%="~" 
  8626.  $ind%=""
  8627.  "Wimp_TransferBlock",mytask%,ind%-pos%,mytask%,dest%,Rec%
  8628.  row%
  8629.  "Wimp_TransferBlock",mytask%,SHsort%,mytask%,SHtabptr%(T%)+offset%,Rows%*Rec%
  8630. scrap_block(sortanchor%)
  8631. redraw(tableW%(T%))
  8632. print_table(T%)
  8633.  printing% 
  8634.  indexing% 
  8635.  start%,ptr%,Line$,title$,rowsused%,Heading$,h$,column%
  8636. print_init("W")
  8637. @ZTextName$=$database%+".PrintJobs."+
  8638. "Tab"+table$(T%),NameLength%):$SaveName%=TextName$
  8639. AYtitle$=
  8640. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  8641. format$="vtab"
  8642. spacer$,"|")>0 
  8643.  spacer$="|"
  8644. NewTab%=(title$="
  8645. E'LenLine%=Lmargin%+Rec%+TabFields%-1
  8646.  LenLine%<Lmargin%+26 
  8647.  LenLine%=Lmargin%+26
  8648. G@maxhead%=0:hspace%=164:fspace%=126:PrintFields%=TabFields%+1
  8649.  column%=0 
  8650.  PrintFields%
  8651. I=  Tab%(column%+2)=Tab%(column%+1)+tabfieldlen%(column%)+1
  8652.  column%
  8653. end_line
  8654. send_title("Validation table")
  8655. send_title("Name: "+table$(T%))
  8656. send_title(
  8657.  NewTab% 
  8658.  column%=0 
  8659.  TabFields%
  8660. Q;    h$=$
  8661. text(tableW%(T%),Rows%*(TabFields%+1)+column%)
  8662. R:    Heading$+=h$+
  8663. tabfieldlen%(column%)-
  8664. (h$)," ")+" "
  8665.  column%
  8666. send_title(
  8667. Heading$))
  8668. send_title(
  8669. title$,Rec%-1))
  8670.  "Hourglass_On"
  8671.  I%=1 
  8672.  Rows%
  8673. ^'  start%=SHtabptr%(T%)+offset%-Rec%
  8674.   Line$=""
  8675.   ptr%=start%+I%*Rec%
  8676.  J%=0 
  8677.  TabFields%
  8678. bD    
  8679.  $ptr%<>"" 
  8680.  Line$+=$ptr%+
  8681. tabfieldlen%(J%)-
  8682. ($ptr%)+1," ")
  8683. c     ptr%+=tabfieldlen%(J%)+1
  8684.  Line$<>"" 
  8685.     rowsused%+=1
  8686. g'    
  8687. store_string(Line$,Lmargin%,
  8688.  "Hourglass_Percentage",I%*100 
  8689.  Rows%
  8690.  "Hourglass_Off"
  8691. send_title(
  8692. (Rows%)+" rows")
  8693. send_title(
  8694. (rowsused%)+" used")
  8695. screen_list
  8696. write_log(-1,"Table printed: "+table$(T%),"")
  8697. table_number(N$)
  8698.  T%,P%
  8699.  N$="" 
  8700. w    T%=-1
  8701.   T%+=1
  8702.  table$(T%)=N$ 
  8703.  T%>LastTable%
  8704.  T%>LastTable% 
  8705. table_info(table%,
  8706.  rows%,
  8707.  columns%,
  8708.  recordlength%,colwidth%(),
  8709.  offset%,
  8710.  heading%,
  8711.  colours$)
  8712.  P%,Q%,I%,new%,S$
  8713. P%=SHtabptr%(table%):Q%=P%
  8714. S$=$P%
  8715. S$,3)="new" 
  8716.  new%=
  8717. :colours$=
  8718. S$,4):P%+=
  8719. ($P%)+1
  8720. rows%=
  8721. ($P%):P%+=
  8722. ($P%)+1
  8723.  columns%=
  8724. ($P%):P%+=
  8725. ($P%)+1
  8726. recordlength%=0
  8727.  I%=0 
  8728.  columns%
  8729. '  colwidth%(I%)=
  8730. ($P%):P%+=
  8731. ($P%)+1
  8732. $  recordlength%+=colwidth%(I%)+1
  8733. heading%=P%
  8734.  new% 
  8735.  I%=0 
  8736.  columns%
  8737.     P%+=
  8738. ($P%)+1
  8739.   offset%=P%-Q%
  8740.  P%+=
  8741. ($P%)+1:offset%=160
  8742.  new% 
  8743. =$heading%
  8744. table_field(F%,L%())
  8745.  I%,P%
  8746.  I%<F%
  8747.   P%+=L%(I%)+1
  8748.   I%+=1
  8749. trailing_number(
  8750.  exact%)
  8751. S$)="~" 
  8752.  exact%=
  8753.  exact%=
  8754.  S$<>"" 
  8755. S$))<58
  8756.     N$=
  8757. S$)+N$
  8758.     S$=
  8759.  N$="" 
  8760. leading_number(
  8761.  column%,
  8762.  S$<>"" 
  8763. S$,2,1)="#" 
  8764.     column%=
  8765.     S$=
  8766. S$,3)
  8767.  column%=0
  8768. (S$)<58
  8769.     N$=N$+
  8770. S$,1)
  8771.     S$=
  8772. S$,2)
  8773.  N$="" 
  8774. load_table(f$,show%)
  8775.  pos%,name$,d%,L%
  8776. f$)="!" 
  8777.  "OS_CLI","Rename "+f$+" "+
  8778. f$)+"+"
  8779.   f$=
  8780. f$)+"+"
  8781. name$=
  8782. leaf(f$):L%=
  8783. (name$)
  8784. TabsLoaded$,name$,7)=0 
  8785.  "OS_File",5,f$ 
  8786.  d%,,,,tablen%
  8787.  LastTable%=MaxTabs%-1 
  8788.  show% 
  8789. ,      
  8790. softerror(
  8791. (MaxTabs%),32):show%=
  8792. :      
  8793. extratabs$,name$)=0 
  8794.  extratabs$+=name$+"\"
  8795.         
  8796.         
  8797.     LastTable%+=1
  8798. 6    
  8799.  LastTable%=MaxTabs%-1 
  8800. lit(validateM%,0,
  8801. Y    SHtabptr%(LastTable%)=
  8802. extend_named_sliding_block(tabanchor%(LastTable%),tablen%)
  8803. 1    
  8804.  "OS_File",255,f$,SHtabptr%(LastTable%)
  8805.      table$(LastTable%)=name$
  8806.     Tablenumber%=LastTable%
  8807.     TabsLoaded$+=","+name$
  8808.  Tablenumber%=
  8809. table_number(name$)
  8810.  show% 
  8811. show_table(Tablenumber%,0,0)
  8812. make_table_menu(menu$)
  8813.  ptr%,I%
  8814. ptr%=
  8815. clear_dynamic_menus
  8816.  LastTable%>=0 
  8817. ,  valtablesM%=
  8818. create_menu(ptr%,menu$)  
  8819. @  ptr%=validateM%+52:ptr%!4=valtablesM%:
  8820. lit(validateM%,1,
  8821. lit(validateM%,1,
  8822. link_to_table(wi%,ic%,b%)
  8823.  icon%
  8824. b%=(b% 
  8825.  %111)
  8826. make_table_menu(TabsLoaded$)
  8827.  2,4:
  8828.  ic%=13 
  8829. 8    
  8830. tick_one(valtablesM%,0,LastTable%,Tablenumber%)
  8831. .    
  8832. show_pop_up_menu(valtablesM%,wi%,ic%)
  8833.  %111 
  8834.  1,4:
  8835.  b%=4 
  8836.  z%=1 
  8837.  z%=-1
  8838.  ic% 
  8839. tcycle(-z%)
  8840. tcycle(+z%)
  8841. !    
  8842. fcycle(z%,fieldnum%)
  8843. "    
  8844. fcycle(-z%,fieldnum%)
  8845. $    
  8846. fcycle(z%,substitute%)
  8847. %    
  8848. fcycle(-z%,substitute%)
  8849.  icon%=10 
  8850. 2      
  8851. shade(linkW%,icon%,
  8852. selected(linkW%,9))
  8853.  icon%
  8854. $    
  8855.  ### Default action ###
  8856. "    icon%=field%(Fieldnumber%)
  8857. 1    
  8858. selected(linkW%,4) 
  8859.  $Tablename%<>"" 
  8860. 4      link$(Fieldnumber%)=$Tablename%+$fieldnum%
  8861. =      
  8862. selected(linkW%,15) 
  8863.  link$(Fieldnumber%)+="~"
  8864. V      
  8865. selected(linkW%,9) 
  8866.  link$(Fieldnumber%)=$substitute%+link$(Fieldnumber%)
  8867. &      
  8868.  chartype%(Fieldnumber%) 
  8869.         
  8870.  64,65,66,67:
  8871. B        link$(Fieldnumber%)=
  8872. (Scrcol%)+"#"+link$(Fieldnumber%)
  8873. ;        
  8874. colour_scroller(Fieldnumber%,Scrcol%,fcol%(8))
  8875. 3        
  8876. set_icon_cols(mainW%,icon%,fcol%(8))
  8877.       
  8878.       
  8879. ?      link$(Fieldnumber%)="":
  8880. set_icon_cols(mainW%,icon%,7)
  8881. :      
  8882. colour_scroller(Fieldnumber%,Scrcol%,fcol%(10))
  8883. $      K%=
  8884. is_a_key(Fieldnumber%)
  8885.       
  8886.         
  8887.          
  8888.  key%:
  8889. colour(K%,1)
  8890.         
  8891. colour(K%,2)
  8892.       
  8893.             
  8894.     link$(0)="LOADED"
  8895. asterisk(
  8896. &    
  8897.  b%=4 
  8898. close_window(linkW%)
  8899. "    
  8900. close_window(linkW%)
  8901. tcycle(z%)
  8902.  LastTable%=-1 
  8903. Tablenumber%+=z%
  8904.  Tablenumber%>LastTable% 
  8905.  Tablenumber%=0
  8906.  Tablenumber%<0 
  8907.  Tablenumber%=LastTable%
  8908. $$Tablename%=table$(Tablenumber%)
  8909. redraw_icon(linkW%,0)
  8910. fcycle(z%,column%)
  8911. table_info(Tablenumber%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  8912. field%=
  8913. ($column%)
  8914. field%+=z%
  8915.  field%>TabFields% 
  8916.  field%=0
  8917.  field%<0 
  8918.  field%=TabFields%
  8919. $column%=
  8920. (field%)
  8921. redraw_icon(linkW%,2)
  8922. redraw_icon(linkW%,10)
  8923. link_status
  8924.  name$,field$,ic%,subst$,exact%,scrcol%
  8925. name$=link$(Fieldnumber%)
  8926. ),field$=
  8927. trailing_number(name$,exact%))
  8928. set_icon(linkW%,15,exact%)
  8929. +,subst$=
  8930. leading_number(scrcol%,name$))
  8931.  subst$="-1" 
  8932.  subst$="0"
  8933.  (name$<>"" 
  8934. TabsLoaded$,name$)>0) 
  8935. .=  $Tablename%=name$:$fieldnum%=field$:$substitute%=subst$
  8936. /'  Tablenumber%=
  8937. table_number(name$)
  8938. set_icon(linkW%,4,(scrcol%=0 
  8939.  scrcol%=Scrcol%))
  8940.   Tablenumber%=0
  8941. 3&  $Tablename%=table$(Tablenumber%)
  8942. deselect(linkW%,4):$fieldnum%="0"
  8943. set_icon(linkW%,9,subst$<>"0")
  8944.  ic%=10 
  8945. shade(linkW%,ic%,
  8946. selected(linkW%,9))
  8947. redraw_icon(linkW%,0):
  8948. redraw_icon(linkW%,2)
  8949. save_links
  8950.  link$(0)="LOADED" 
  8951. ($database%+".Link")
  8952.  F%=1 
  8953.  fields%
  8954. #F,link$(F%)
  8955. close_file(F)
  8956.  End of Validation table routines ------------------------------------
  8957. changes(key%,field%,Old$,New$,confirm%)
  8958.  M$,K%,P%,index%,zero%,target$,log$,numeric%,fi$
  8959. fi$=" "
  8960.  I%=0 
  8961. selected(queryW%,I%+6) 
  8962.  fi$+=
  8963. (I%)+"\"
  8964. fi$,"\")>0 
  8965.  fi$="s"+fi$
  8966. R"target$=$Query%:Search$=
  8967. parse
  8968. S%target$=
  8969. replace(target$,",","\")
  8970.  New$="" 
  8971.  n$="<null>" 
  8972.  n$=New$
  8973. is_a_key(field%)
  8974. softerror("",144)
  8975.  key%:
  8976. softerror("",12)
  8977.  K%>0 
  8978. msg("Err189") 
  8979.  M$=""
  8980.  Old$<>"" 
  8981.  o$=" "+
  8982. msg("Err184")+Old$ 
  8983.  o$=""
  8984.  target$="" 
  8985.  target$=" "+
  8986. msg("Err190,"+fi$) 
  8987.  target$=" "+
  8988. msg("Err191,"+target$+","+fi$)
  8989.  chartype%(field%) 
  8990. ^N    
  8991.  41,42,43,61,62:Old$=
  8992. pos_neg(field%,Old$):New$=
  8993. pos_neg(field%,New$)
  8994. _Z    
  8995.  New$<>"" 
  8996. "+-*/",
  8997. New$,1))>0 
  8998. New$,2))>0 
  8999.  n$=Tag$(field%)+n$:numeric%=
  9000. a'  target$=
  9001. replace(target$,",","\")
  9002. b>  log$=
  9003. msg("Err192,"+Tag$(field%)+","+n$+o$+target$+". ")
  9004.   target$=log$+M$
  9005.  confirm%=
  9006. confirm(target$)=
  9007. e)    subtotal%=
  9008. count_recs(key%,zero%)
  9009. f.    dbasehandle%=
  9010. ($database%+".Database")
  9011. g3    
  9012. scan_marked_subfiles("P%<>top",key%,5,1,
  9013. h!    
  9014. close_file(dbasehandle%)
  9015.     $Date%(file%)=
  9016. today
  9017.     date%?file%=1
  9018. display(key%,addr)
  9019. l,    
  9020.  K%>0 
  9021. remove_index(Index$(K%),
  9022. write_log(-1,log$,"")
  9023. asterisk(
  9024. is_a_key(F%)
  9025.  key%,flag%,J%
  9026. flag%=-1
  9027.  J%=0 
  9028. x&    
  9029.  KF%(key%,J%)=F% 
  9030.  flag%=key%
  9031.   key%+=1
  9032.  flag%>=0 
  9033.  key%>Keys% 
  9034. =flag%
  9035. read(display%,N%,K%,R%,f$)
  9036.  I%,key%,dbasehandle%,V%,P%,C%,d%,path$
  9037. "dbasehandle%=
  9038. (f$+".Database")
  9039. F$()=field$()
  9040. %$Rf%(0)="":field$(0)="":key$()=""
  9041. #dbasehandle%=
  9042. (R%)*Length%
  9043.  I%=1 
  9044.  zerolen%?I%=0 
  9045.  field$(I%)=
  9046. #dbasehandle% 
  9047.  field$(I%)=""
  9048.   C%=chartype%(I%)
  9049. "    
  9050.  21,27,28,32,34,40,45,59:
  9051. M    
  9052.  $Rf%(I%) holds key legend or other important data. Don't overwrite!
  9053. :$Rf%(I%)=field$(I%)
  9054.  35,44:
  9055.  WithLeaf% 
  9056. 4      $
  9057. text(mainW%,field%(I%))=
  9058. leaf(link$(I%))
  9059. (      
  9060. text(mainW%,field%(I%))=""
  9061.         
  9062.  36,37,38:
  9063.  display% 
  9064. *      
  9065. set_blob_sprite(R%,I%,C%,path$)
  9066. )      
  9067.  displayit%?I%=1 
  9068.  design% 
  9069. %        
  9070.  "OS_File",5,path$ 
  9071. 3        
  9072.  d%>0 
  9073.  "OS_CLI","Filer_Run "+path$
  9074.       
  9075. 1    
  9076.  display% 
  9077. show_text_block(I%,R%)
  9078. .    
  9079.  display% 
  9080. show_picture(I%,R%)
  9081.  41,42,43:
  9082.  display% 
  9083. V      
  9084.  field$(I%)=" " 
  9085. select(mainW%,field%(I%)) 
  9086. deselect(mainW%,field%(I%))
  9087.         
  9088.  61,62:
  9089. 9    V%=
  9090. val(mainW%,field%(I%)):P%=
  9091. $V%,";S"):V%+=P%+1
  9092.  field$(I%) 
  9093.       
  9094. (0):$V%="no"
  9095.       
  9096.  " ":$V%="yes"
  9097. 4      
  9098.  C%=61 
  9099.  $V%="null" 
  9100.  $V%="dontcare"
  9101.         
  9102. (    
  9103.  R%=RA% 
  9104.  $Rf%(I%)=
  9105. (REC%)
  9106. 9    
  9107.  R%=RA% 
  9108. split_link(I%,R$,V$):$Rf%(I%)=R$
  9109. '    
  9110.  R%=RA% 
  9111.  $Rf%(I%)=
  9112. (    
  9113.  R%=RA% 
  9114.  $Rf%(I%)=
  9115. $,15)
  9116. 1    
  9117.  R%=RA% 
  9118.  $Rf%(I%)=
  9119. convert_date(2)
  9120. 1    
  9121.  R%=RA% 
  9122.  $Rf%(I%)=
  9123. convert_date(4)
  9124. #    
  9125.  R%=RA% 
  9126.  $Rf%(I%)=
  9127. '    
  9128.  R%=RA% 
  9129.  $Rf%(I%)=
  9130. )    
  9131.  R%=RA% 
  9132.  $Rf%(I%)=
  9133. $,5,2)
  9134. )    
  9135.  R%=RA% 
  9136.  $Rf%(I%)=
  9137. $,8,3)
  9138. J    
  9139.  R%=RA% 
  9140. $,8,3):P%=
  9141. Months$,M$):$Rf%(I%)=
  9142. ((P%+2) 
  9143. F    
  9144.  R%=RA% 
  9145. $,3):P%=
  9146. Days$,D$):$Rf%(I%)=
  9147. ((P%+2) 
  9148. *    
  9149.  R%=RA% 
  9150.  $Rf%(I%)=
  9151. $,12,4)
  9152.  display% 
  9153. .      f$=
  9154. filename($Rf%(I%),"PrintRes",-1)
  9155. &      Z%=
  9156. set_remote_sprite(I%,f$)
  9157. L      
  9158.  Z%>0 
  9159.  displayit%?I%=1 
  9160.  design% 
  9161.  "OS_CLI","Filer_Run "+f$
  9162. 0    
  9163.  64,65,66,67:
  9164. get_scroller(R%,I%,C%-63)
  9165. :    
  9166.  68,69,70,71,72,73,74,75,76,77,78:
  9167. set_now(C%,I%)
  9168.  key%=0 
  9169.  Keys%
  9170.     key$(key%)=
  9171. key(key%)
  9172.  key%
  9173. close_file(dbasehandle%)
  9174. cfield$()=field$()
  9175.  special%(1) 
  9176. (libfunc$+"_function(1)")
  9177. set_now(C%,I%)
  9178.  P%,D$,M$
  9179.  68:$Rf%(I%)=
  9180.  69:$Rf%(I%)=
  9181. $,15)
  9182.  70:$Rf%(I%)=
  9183. convert_date(2)
  9184.  71:$Rf%(I%)=
  9185. convert_date(4)
  9186.  72:$Rf%(I%)=
  9187.  73:$Rf%(I%)=
  9188.  74:D$=
  9189. $,3):P%=
  9190. Days$,D$):$Rf%(I%)=
  9191. ((P%+2) 
  9192.  75:$Rf%(I%)=
  9193. $,5,2)
  9194.  76:$Rf%(I%)=
  9195. $,8,3)
  9196.  77:M$=
  9197. $,8,3):P%=
  9198. Months$,M$):$Rf%(I%)=
  9199. ((P%+2) 
  9200.  78:$Rf%(I%)=
  9201. $,12,4)
  9202. update_calcs(N%)
  9203.  design% 
  9204.  N%>0 
  9205.  $Rf%(N%)=cfield$(N%) 
  9206.  I%,C%,L%,F,F$,Form$,S$,SF$,changed%,c%
  9207. GForm$=update$(N%):
  9208.  List of fields affected by a change in field N%
  9209.  Form$=0 
  9210. calc_error(F$,F%,visible$,real$):=
  9211.  I%=1 
  9212. (Form$)-1 
  9213.   F%=
  9214. fnum(
  9215. Form$,I%,2))
  9216.  F%<>N% 
  9217. &    
  9218. split_link(F%,real$,visible$)
  9219.  chartype%(F%) 
  9220. E      
  9221.  6:F=
  9222. (real$):F$=
  9223.  fix%(F%)<>0 
  9224. fix_point(F$,F%)
  9225. L      
  9226.  7:F$=
  9227. (real$):
  9228.  N%=0 
  9229. expand(F$,link$(F%),L%,SF$,c%):F$=SF$
  9230.         
  9231. (F$)<=len%(F%) 
  9232. *      $Rf%(F%)=F$:cfield$(N%)=$Rf%(N%)
  9233. 4      
  9234. redraw_icon(mainW%,field%(F%))           
  9235. .      
  9236.  F$(F%)<>F$ 
  9237.  F$(F%)=F$:changed%=
  9238.       
  9239.  moan_err%,""
  9240.         
  9241. "    changed%=
  9242. update_calcs(F%)
  9243. 9    
  9244.  Other computed fields might depend on this one!
  9245. =changed%
  9246. calc_error(F$,F%,V$,R$)
  9247. replace(V$,",","\"):R$=
  9248. replace(R$,",","\")
  9249.  Division by zero. Ignore - this error will often occur where
  9250.  a field used as a divisor has not yet been filled in
  9251. softerror(V$,73):
  9252.  No such field tag
  9253. softerror(V$,137):
  9254.  No such FN/PROC
  9255.  moan_err%:
  9256. softerror(F$+","+Tag$(F%),10)
  9257. softerror(
  9258. $+","+V$+","+R$,170)
  9259. check_record
  9260.  F%,flag%,S$,V$
  9261.  present%<7 
  9262.  nosave% 
  9263.  F%=1 
  9264.  fields%
  9265.   V$=vtype$(chartype%(F%))
  9266. selected(prefsW%,47) 
  9267.  V$="E" 
  9268.       
  9269.  ?Rf%(F%)=32
  9270. !        $Rf%(F%)=$(Rf%(F%)+1)
  9271.       
  9272.         
  9273.  Check whether record has been changed (write to disc if so)...
  9274. 6    
  9275.  "E","T","C":
  9276.  $Rf%(F%)<>field$(F%) 
  9277.  flag%=
  9278. A    
  9279.  "X":
  9280.  chartype%(F%)=60 
  9281.  $Rf%(F%)<>field$(F%) 
  9282.  flag%=
  9283. A    
  9284.  "L":
  9285.  ScrollChanged% 
  9286. write_scroller(REC%,F%):flag%=
  9287.  ...and that all mandatory fields have been filled in
  9288.  V$="E" 
  9289. ;    
  9290.  $Rf%(F%)="" 
  9291.  mandatory%?F%=1 
  9292.  S$+=Tag$(F%)+"\" 
  9293.  flag% 
  9294. write(fields%,key%):
  9295. blob_deleterestore("D"):
  9296. asterisk(
  9297. selected(prefsW%,21) 
  9298.  Validation is turned off
  9299. key(0)="" 
  9300.  Don't report on mandatory fields if no primary key
  9301.  S$="" 
  9302. S$,"\")>0 
  9303.  S$="s "+S$ 
  9304.  S$=" "+S$
  9305. softerror(S$,61)
  9306. write(N%,k%)
  9307.  key%,newrec%
  9308. close_file(dbasehandle%):
  9309.  Access% 
  9310. softerror("",14):
  9311. close_file(dbasehandle%)
  9312.  template%=2 
  9313. write_dbase(RA%,N%,
  9314. ):template%=0:
  9315. PRI$=
  9316. key(0)
  9317.  PRI$="" 
  9318.  retry%=
  9319. confirm(
  9320. msg("Err202")):
  9321.  key$(0) 
  9322.  key%=0 
  9323.  Keys%
  9324.     KEY$=
  9325. key(key%)
  9326.     kl%=
  9327. (KEY$)
  9328. 0F    
  9329. insert(KEY$,key%,dupwarn%):
  9330.  KEY$="*Failed*" 
  9331.  moan_err%,""
  9332. 1!    key$(key%)=KEY$:newrec%=
  9333. 2"    
  9334.  k%=key% 
  9335.  addr=nextfree%
  9336.  key%
  9337.  key%=0 
  9338.  Keys%
  9339.     KEY$=
  9340. key(key%)
  9341.  KEY$<>key$(key%) 
  9342. 8[      
  9343.  key%=0 
  9344. confirm(
  9345. msg("Err48")) 
  9346. restore(1,fields%,"",-1):
  9347.  moan_err%,""
  9348. 9"      
  9349. delete(key$(key%),key%)
  9350. :%      
  9351. insert(KEY$,key%,dupwarn%)
  9352.       
  9353.  KEY$="*Failed*" 
  9354.         KEY$=key$(key%)
  9355. =%        
  9356. restore(1,fields%,"",-1)
  9357. >'        
  9358. insert(KEY$,key%,dupwarn%)
  9359.         
  9360.  moan_err%,""
  9361.       
  9362.       key$(key%)=KEY$
  9363. B        
  9364.  key%
  9365. $Date%(file%)=
  9366. today
  9367. date%?file%=1
  9368.  newtree% 
  9369. write_dbase(REC%,N%,
  9370.  newrec% 
  9371.  k%>0 
  9372. rectify_address(k%)
  9373.  autobalance% 
  9374.  (REC% 
  9375. ($Every%))=0 
  9376.  key%=0 
  9377.  Keys%
  9378.       
  9379. balance(key%)
  9380.  key%
  9381. rectify_address(k%)
  9382.  special%(3) 
  9383. (libfunc$+"_function(3)")
  9384. rectify_address(key%)
  9385. S$=key$(key%)
  9386.  S$="" 
  9387.  null%(key%)=
  9388.  S$=ResKEY$:REC%=ResREC%
  9389.  case%(key%) 
  9390. u(S$)
  9391. Y=val$=
  9392. type(key%):
  9393.  val$="VAL" 
  9394.  kl%=KL%(key%) 
  9395.  kl%=
  9396. addr=
  9397. search(S$,key%,2)
  9398. write_dbase(R%,N%,logchanges%)
  9399.  I%,F$,S$,dbasehandle%,flag%
  9400. _*dbasehandle%=
  9401. ($database%+".Database")
  9402. #dbasehandle%=R%*Length%
  9403.  logchanges% 
  9404.  newrec% 
  9405. cF    
  9406. write_log(R%,"New record: Subfile "+
  9407. (file%)+"  "+
  9408. key(0),"")
  9409. d-    
  9410. write_log(R%,logentry$,""):flag%=
  9411.  I%=1 
  9412.  chartype%(I%) 
  9413.  39,40:F$=""
  9414.  newrec% 
  9415.       F$=$Rf%(I%)
  9416.       
  9417. split_link(I%,R$,V$)
  9418.       S%=
  9419. o/      
  9420.  dontincrement%=
  9421.  S%+=1:F$=
  9422. (S%-1)
  9423. p       calc$(I%)=V$+"|"+
  9424.       
  9425.  F$=$Rf%(I%)
  9426. r        
  9427.     dontincrement%=
  9428.  58:F$=
  9429. :F$=$Rf%(I%)
  9430.  zerolen%?I%=0 
  9431. #dbasehandle%,F$
  9432.  flag%=
  9433.  F$<>field$(I%) 
  9434.  chartype%(I%)<>59 
  9435. y%    
  9436.  F$="" 
  9437.  D$="<null>" 
  9438.  D$=F$
  9439. z5    
  9440.  field$(I%)="" 
  9441.  S$="<null>" 
  9442.  S$=field$(I%)
  9443. {2    
  9444. write_log(-1,Tag$(I%)+": "+S$,"---> "+D$)
  9445.   field$(I%)=F$
  9446. selected(prefsW%,44) 
  9447. readsmarray(dbasehandle%,R%)
  9448. write_csv_rec(R%,csvform$,autocsvhandle%)
  9449. close_file(dbasehandle%)
  9450. split_link(F%,
  9451.  L$,P%,F
  9452. L$=calc$(F%)
  9453. L$,1)="#":
  9454. /  P%=
  9455. L$,"#",2):V$=
  9456. L$,P%+1):R$=
  9457. L$,2,P%-2)
  9458. L$,"|")>0:
  9459. +  P%=
  9460. L$,"|"):V$=
  9461. L$,P%-1):R$=
  9462. L$,P%+1)
  9463. :R$="":V$=""
  9464. key(key%)
  9465. key2(key%,0)
  9466. key2(key%,loc%)
  9467.  I%,W%,P%,S$,W$,T$,pad$,chars%,pos%,word%,wd%,field%,numeric%
  9468.  I%=0 
  9469.   W%=KW%(key%,I%):W$=""
  9470.  W%>0 
  9471.     chars%=W% 
  9472.     pos%=(W%>>8) 
  9473.     word%=(W%>>16) 
  9474.     field%=KF%(key%,I%)
  9475.  chartype%(field%) 
  9476. 8      
  9477.  3,6,46,47,54,56,57,74,75,77,78,79:numeric%=
  9478.       
  9479. :numeric%=
  9480.         
  9481. :    
  9482.  loc%=0 
  9483.  S$=$Rf%(field%)+" " 
  9484.  S$=F$(field%)+" "
  9485.  numeric% 
  9486.       
  9487.  word% 
  9488.         
  9489.         
  9490. !          C$=
  9491. S$,1):S$=
  9492. S$,2)
  9493.            
  9494.  C$<>" " 
  9495.  W$+=C$
  9496.         
  9497.  S$=""
  9498.         
  9499.         wd%=0
  9500.         
  9501. :          P%=
  9502. S$," "):w$=
  9503. S$,P%-1):S$=
  9504. S$,P%+1):wd%+=1
  9505.         
  9506.  wd%=word% 
  9507.  S$=""
  9508.         
  9509.  wd%=word% 
  9510.  W$=w$
  9511.       
  9512.        
  9513.  chartype%(field%) 
  9514. 7        
  9515.  5,50,51,70,71,49,69,52,58,72,55,76,53,73:
  9516. ,        W$=
  9517. transform_date(KL%(key%),W$)
  9518.       
  9519.       
  9520.  pos% 
  9521.         
  9522.  0:W$=
  9523. W$,chars%)
  9524.          
  9525.  255:W$=
  9526. W$,chars%)
  9527. !        
  9528. W$,pos%,chars%)
  9529.       
  9530.       
  9531.  W$<>"" 
  9532. B        
  9533.  incspace%(key%)=
  9534.  word%>0 
  9535.  W$+=
  9536. chars%-
  9537. (W$)," ")
  9538.       
  9539.       
  9540.         
  9541.     T$+=W$
  9542.  T$<>"" 
  9543.  incspace%(key%)=
  9544.  pad$=" " 
  9545.  pad$="#"
  9546.    T$+=
  9547. KL%(key%)-
  9548. (T$),pad$)
  9549.  case%(key%) 
  9550. u(T$)
  9551. u(N$)
  9552.  I%,B%
  9553. $key=N$
  9554.  I%=0 
  9555. (N$)-1
  9556.   B%=key?I%
  9557.  B%>96 
  9558.  B%<123 
  9559.  key?I%=B% 
  9560.     =$key
  9561. l(N$)
  9562.  I%,B%
  9563. $key=N$
  9564.  I%=0 
  9565. (N$)-1
  9566.   B%=key?I%
  9567.  B%>64 
  9568.  B%<91 
  9569.  key?I%=B% 
  9570.     =$key
  9571. today
  9572.  Y$,M$,D$,M%,date$
  9573. $,14,2)
  9574. $,5,2)
  9575. $,8,3)
  9576. Months$,M$)+2) 
  9577.  M%<10 
  9578.  M$="0"+
  9579. (M%) 
  9580. &date$=D$+$datesep%+M$+$datesep%+Y$
  9581. =date$
  9582. date(key%)
  9583.  SHkeyptr%(key%)<=0 
  9584.  I%=0 
  9585.  date%?I%=1 
  9586. (    $(SHkeyptr%(key%)+8+9*I%)=
  9587. today
  9588.     $Date%(I%)=
  9589. today
  9590. check_date(F%,D$,place%,
  9591.  date$)
  9592.  I%,D%,M%,Y%,L%,P%,Q%,U$,d$,m$,y$
  9593.  L%=0 
  9594.  I%=1 
  9595.   C$=
  9596. D$,I%,1)
  9597.  C$<"0" 
  9598.  C$>"9" 
  9599.  P%=0 
  9600.  P%=I% 
  9601.  Q%=I%
  9602.  P%=0 
  9603.  Q%=0 
  9604. restore(F%,F%,
  9605. msg("Err102"),4):=
  9606. D$,P%-1))
  9607. D$,P%+1,Q%-P%-1))
  9608. D$,Q%+1))
  9609.  Y%<0 
  9610.  D%<1 
  9611. restore(F%,F%,"",4):=
  9612.  M%<1 
  9613.  M%>12 
  9614. restore(F%,F%,
  9615. msg("Err118"),4):=
  9616.  (Y% 
  9617.  400)=0:U$=leap$:
  9618.  Century year is leap year if divisible by 400
  9619.  (Y% 
  9620.  100)<>0 
  9621.  (Y% 
  9622.  4)=0:U$=leap$:
  9623.  otherwise not
  9624. :U$=nonleap$
  9625. U$,2*M%-1,2)
  9626. (DM$) 
  9627. restore(F%,F%,
  9628. msg("Err119,"+DM$),4):=
  9629. (D%):
  9630. (d$)=1 
  9631.  d$="0"+d$
  9632. (M%):
  9633. (m$)=1 
  9634.  m$="0"+m$
  9635. (Y%):
  9636. (y$)=1 
  9637.  y$="0"+y$
  9638. (y$)<>2 
  9639. (y$)<>4 
  9640. restore(F%,F%,
  9641. msg("Err120"),4):=
  9642. (y$)=4 
  9643.  len%(F%)<10 
  9644. y$,2)
  9645. (y$)=2 
  9646.  len%(F%)>=10 
  9647.  Y%<CentChange% 
  9648.  y$="20"+y$ 
  9649.  y$="19"+y$
  9650. &date$=d$+$datesep%+m$+$datesep%+y$
  9651.  place%=0 
  9652. (date$)>len%(F%) 
  9653. restore(F%,F%,
  9654. msg("Err7,"+date$),4):=
  9655.  place% 
  9656.  0:$Rf%(F%)=date$:
  9657. redraw_icon(mainW%,field%(F%))
  9658. text(searchW%,1)=date$:
  9659. redraw_icon(searchW%,1)
  9660. convert_date(L%)
  9661.  d$,m$,y$,M$,M%
  9662. $,5,2)
  9663. $,8,3)
  9664. Months$,M$)
  9665. M%=(P%+2) 
  9666. (M%):
  9667.  M%<10 
  9668.  m$="0"+m$
  9669. $,16-L%,L%)
  9670. !=d$+$datesep%+m$+$datesep%+y$
  9671. transform_date(L%,K$)
  9672.  Y$,M$,D$,T$,DW$,S$,P%,V%
  9673.   V%=
  9674.     P%=
  9675. Months$,K$)
  9676.  P%>0 
  9677. )"      K$=
  9678. ((P%+2) 
  9679.  3),2)
  9680. *$      
  9681. Days$,K$)+2) 
  9682. -3    
  9683. K$,1)="0" 
  9684.  V%>7 
  9685.  S$=Months$ 
  9686.  S$=Days$
  9687.     K$=
  9688. S$,V%*3-2,3)
  9689.  5:K$=
  9690. days(K$))
  9691.  8:K$=
  9692. K$,2)+
  9693. K$,3,4)+
  9694. K$,2)
  9695. (K$)<100 
  9696. 4!    K$=
  9697. K$,4)+
  9698. K$,3,4)+
  9699. K$,2)
  9700. 5#    
  9701. K$,2)+
  9702. K$,5,4)+
  9703. K$,4)
  9704.   DW$=
  9705. K$,3):Y$=
  9706. K$,10,4)
  9707. 9.  M$=
  9708. Months$,
  9709. K$,7,3))+2) 
  9710.  3),2)
  9711.   D$=
  9712. K$,5,2):T$=
  9713. K$,15,8)
  9714. ;%  K$=Y$+$datesep%+M$+$datesep%+D$
  9715.  T$<>"" 
  9716.  K$+=$datesep%+T$
  9717. refresh_dates
  9718.  key%
  9719.  key%=0 
  9720.  Keys%
  9721. date(key%)
  9722.  key%
  9723. days(date$)
  9724.  Returns no. of elapsed days since 1 Jan 1900
  9725.  D%,M%,Y%
  9726.  date$="" 
  9727. date$,2))
  9728. date$,4,2))
  9729. date$,7))
  9730.  Y%<10:Y%+=2000
  9731.  Y%<100:Y%+=1900
  9732. R;!ordinals%=0:ordinals%!4=0:ordinals%!8=0:ordinals%!12=1
  9733. S3ordinals%!16=D%:ordinals%!20=M%:ordinals%!24=Y%
  9734.  "Territory_ConvertOrdinalsToTime",-1,utctime%,ordinals%
  9735. =(utctime%!1) 
  9736.  33750
  9737. date(days%,L%)
  9738. X0$dateformat%="%DY"+$datesep%+"%MN"+$datesep%
  9739.  L%=8 
  9740.  $dateformat%+="%YR"+
  9741.  $dateformat%+="%CE%YR"+
  9742. utctime%!1=days%*33750
  9743.  "Territory_ConvertDateAndTime",-1,utctime%,datebuffer%,16,dateformat%
  9744. datebuffer%?L%=13
  9745. =$datebuffer%
  9746. check_time(
  9747.  time$,wi%,ic%)
  9748.  I%,P%,Q%,H%,M%,S%,C$
  9749.  I%=1 
  9750. (time$)
  9751.   C$=
  9752. time$,I%,1)
  9753.  C$<"0" 
  9754.  C$>"9" 
  9755.  P%=0 
  9756.  P%=I% 
  9757.  Q%=I%
  9758.  TimeFirst$ 
  9759.  "H":
  9760.  P%=0:H%=
  9761. (time$)
  9762. k-    
  9763.  Q%=0:H%=
  9764. (time$):M%=
  9765. time$,P%+1))
  9766. l;    
  9767. (time$):M%=
  9768. time$,P%+1)):S%=
  9769. time$,Q%+1))
  9770.  "S":
  9771.  P%=0:S%=
  9772. (time$)
  9773. q-    
  9774.  Q%=0:M%=
  9775. (time$):S%=
  9776. time$,P%+1))
  9777. r;    
  9778. (time$):M%=
  9779. time$,P%+1)):S%=
  9780. time$,Q%+1))
  9781.  H%<0 
  9782.  H%>23 
  9783. restore(Fieldnumber%,Fieldnumber%,"hours",94):=
  9784.  M%<0 
  9785.  M%>59 
  9786. restore(Fieldnumber%,Fieldnumber%,"minutes",94):=
  9787.  S%<0 
  9788.  S%>59 
  9789. restore(Fieldnumber%,Fieldnumber%,"seconds",94):=
  9790. x!time$=
  9791. time(H%*3600+M%*60+S%)
  9792. text(wi%,ic%)=time$:
  9793. redraw_icon(wi%,ic%)
  9794. seconds(time$)
  9795.  H%,M%,S%,secs%
  9796. (time$)<8 
  9797.   M%=
  9798. (time$)
  9799.   S%=
  9800. time$,2))
  9801.   H%=
  9802. (time$)
  9803.   M%=
  9804. time$,4,2))
  9805.   S%=
  9806. time$,2))
  9807. secs%=H%*3600+M%*60+S%
  9808. =secs%
  9809. time(secs%)
  9810.  time$,hrs$,hrs%,L%,offset%
  9811.  secs%<3600 
  9812.  FullTime% 
  9813. 5  $dateformat%="%MI"+$timesep%+"%SE%TZ"+
  9814. (0):L%=5
  9815. E  $dateformat%="%24"+$timesep%+"%MI"+$timesep%+"%SE%TZ"+
  9816. (0):L%=8
  9817.  "Territory_ReadCurrentTimeZone" 
  9818. ,offset%
  9819.  secs%<3600 
  9820.  offset%=0:
  9821.  Kludge! 
  9822. ,!utctime%=secs%*100-offset%:utctime%?4=0
  9823.  "Territory_ConvertDateAndTime",-1,utctime%,datebuffer%,16,dateformat%
  9824. datebuffer%?11=13
  9825. time$=
  9826. $datebuffer%,L%)
  9827. =time$
  9828. validate(F%,
  9829.  TabFields%,
  9830.  name$)
  9831. selected(prefsW%,21) 
  9832.  row%,field%,Rows%,Rec%,ind%,sind%,pos%,start%,subst%,spos%,date$,subst$,L1%,L2%,L%,S$,exact%,extra$,S%,wi%,ic%,scrcol%,cols%,scroll%
  9833. name$=link$(F%)
  9834. )field%=
  9835. trailing_number(name$,exact%)
  9836. )subst%=
  9837. leading_number(scrcol%,name$)
  9838.  chartype%(F%) 
  9839.  64,65,66,67:
  9840.   S%=
  9841. scroller_number(F%)
  9842.   cols%=scrolldata%(S%,8)
  9843.  "Wimp_GetCaretPosition",,block%
  9844.   wi%=!block%:ic%=block%!4
  9845.  wi%=scrollerW%(S%) 
  9846.  ic% 
  9847.  cols%=scrcol%-1 
  9848.  scroll%=
  9849. :S$=$
  9850. text(wi%,ic%):L%=
  9851. :S$=$Rf%(F%):L%=
  9852. (S$):wi%=mainW%:ic%=field%(F%)
  9853.  S$="" 
  9854.  fix%(F%)<>0 
  9855.  $Rf%(F%)=
  9856. fix_point(S$,F%):
  9857. redraw_icon(wi%,ic%)
  9858.  chartype%(F%)=3 
  9859. check_val(calc$(F%),S$)=
  9860.  chartype%(F%)=5 
  9861. check_date(F%,S$,0,date$)
  9862.  chartype%(F%)=8 
  9863. check_time(S$,wi%,ic%)
  9864.  name$="" 
  9865. name$,1)="#" 
  9866. name$,1)="@" 
  9867. table_number(name$):
  9868.  T%<0 
  9869. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  9870.  S$=field$(F%) 
  9871.  TabFields%=0 
  9872. ,pos%=
  9873. table_field(field%,tabfieldlen%())
  9874.  subst%<0 
  9875.  spos%=pos% 
  9876.  spos%=
  9877. table_field(subst%,tabfieldlen%())
  9878. %start%=SHtabptr%(T%)+offset%-Rec%
  9879. 'ind%=start%+pos%:sind%=start%+spos%
  9880.  exact% 
  9881. 1  cond$="row%>Rows% OR $ind%=S$ OR $sind%=S$"
  9882.  cond$="row%>Rows% OR ($ind%=LEFT$(S$,L1%) AND L1%>0) OR ($sind%=LEFT$(S$,L2%) AND L2%>0)"
  9883.  row%+=1
  9884.   ind%+=Rec%:sind%+=Rec%
  9885.    L1%=
  9886. ($ind%):L2%=
  9887. ($sind%)
  9888. (cond$)=
  9889.  row%>Rows% 
  9890. restore(F%,F%,S$+","+name$,5):=
  9891.  exact% 
  9892. ,    
  9893.  $sind%=
  9894. S$,L2%):extra$=
  9895. S$,L%-L2%)
  9896. +    
  9897.  $ind%=
  9898. S$,L1%):extra$=
  9899. S$,L%-L1%)
  9900. ind%=start%+row%*Rec%
  9901.  I%=0 
  9902.  TabFields%
  9903. ,  rel%(I%)=ind%:ind%+=tabfieldlen%(I%)+1
  9904.  subst%>=0 
  9905.   subst$=$sind%
  9906.   S$=subst$+extra$
  9907.  scroll% 
  9908.  L%=sclen%(S%,scrcol%-1) 
  9909.  L%=len%(F%)
  9910. (S$)<=L% 
  9911. text(wi%,ic%)=S$:
  9912. redraw_icon(wi%,ic%)
  9913.     =row%
  9914. check_val(C$,N$)
  9915.  min$,max$,P%,V,ok%
  9916.     ok%=
  9917.  N$="" 
  9918.  C$<>"" 
  9919.   P%=
  9920. C$,"|")
  9921.  P%>0 
  9922.     min$=
  9923. C$,P%-1)
  9924.     max$=
  9925. C$,P%+1)
  9926. T    
  9927.  min$<>"" 
  9928. (min$) 
  9929.  ok%=
  9930. restore(F%,F%,Tag$(F%)+",(min="+min$+")",58)
  9931. T    
  9932.  max$<>"" 
  9933. (max$) 
  9934.  ok%=
  9935. restore(F%,F%,Tag$(F%)+",(max="+max$+")",59)
  9936. restore(from%,to%,E$,E%)
  9937.  F%,V%,P%,wi%,ic%
  9938.  E%>=0 
  9939. softerror(E$,E%)
  9940.  F%=from% 
  9941.  chartype%(F%) 
  9942. 1    
  9943.  21,27,28,32,34,39,40,45,59:
  9944.  Do nothing
  9945.  64,65,66,67:
  9946.     S%=
  9947. scroller_number(F%)
  9948. *    
  9949.  "Wimp_GetCaretPosition",,block%
  9950.      wi%=!block%:ic%=block%!4
  9951.  wi%=scrollerW%(S%) 
  9952.       $
  9953. text(wi%,ic%)=cell$
  9954.       
  9955. set_caret(0,wi%,ic%)
  9956.       
  9957. redraw_icon(wi%,ic%)
  9958.         
  9959.      
  9960.  field$(F%)<>$Rf%(F%) 
  9961.       $Rf%(F%)=field$(F%)
  9962.       
  9963.  chartype%(F%) 
  9964.         
  9965.  0,1,2,3,4,5,8,63:
  9966. =        
  9967.  from%=to% 
  9968. set_caret(0,mainW%,field%(from%)) 
  9969.         
  9970.  41,42,43:
  9971. X        
  9972.  field$(F%)=" " 
  9973. select(mainW%,field%(F%)) 
  9974. deselect(mainW%,field%(F%))
  9975.         
  9976.  61,62:
  9977. =        V%=
  9978. val(mainW%,field%(F%)):P%=
  9979. $V%,";S"):V%+=P%+1
  9980.         
  9981.  field$(F%) 
  9982.           
  9983. (0):$V%="no"
  9984.           
  9985.  " ":$V%="yes"
  9986. C          
  9987.  chartype%(F%)=61 
  9988.  $V%="null" 
  9989.  $V%="dontcare"
  9990.         
  9991.           
  9992.       
  9993. )      
  9994. redraw_icon(mainW%,field%(F%))
  9995.         
  9996. relations
  9997.  F%,I%,W%,L%,N$,row%,col%,subst%,flags%,name$,x%,y%,vxmin%,vymax%,scrollx%,scrolly%,exact%,scrcol%,width%,height%
  9998. name$=link$(Fieldnumber%)
  9999.  name$="" 
  10000.  $Rf%(Fieldnumber%)="" 
  10001.     F%=-1
  10002.     &row%=
  10003. validate(Fieldnumber%,F%,N$)
  10004. 'col%=
  10005. trailing_number(name$,exact%)
  10006. )subst%=
  10007. leading_number(scrcol%,name$)
  10008.  row%>0 
  10009. delete_icons(relateW%,0)
  10010.  I%=0 
  10011. 0      
  10012.  col%:flags%=&00000531+(fcol%(8)<<24)
  10013. #      
  10014.  subst%:flags%=&0B000531
  10015.       
  10016. :flags%=&07000531
  10017.         
  10018. %    L%=
  10019. ($rel%(I%)):
  10020.  L%<5 
  10021.  L%=5
  10022. %    W%=
  10023. string_width($rel%(I%))+8
  10024. P    R%=
  10025. create_icon(0,relateW%,0,-I%*36-36,W%,32,flags%,"",rel%(I%),-1,L%+1)
  10026.  W%>width% 
  10027.  width%=W%
  10028.   $RelTitle%=N$
  10029.   height%=F%*36+36
  10030. a  !block%=0:block%!4=-height%:block%!8=width%:block%!12=0:
  10031.  "Wimp_SetExtent",relateW%,block%
  10032. 5  !block%=mainW%:
  10033.  "Wimp_GetWindowState",,block%
  10034. L  vxmin%=block%!4:vymax%=block%!16:scrollx%=block%!20:scrolly%=block%!24
  10035. Q  !block%=mainW%:block%!4=field%(Fieldnumber%):
  10036.  "Wimp_GetIconState",,block%
  10037. ?  x%=block%!16-scrollx%+vxmin%:y%=block%!20-scrolly%+vymax%
  10038.  7  !block%=relateW%:
  10039.  "Wimp_GetWindowState",,block%
  10040.  ScreenWidth%-x%<width% 
  10041.  width%=ScreenWidth%-x%
  10042. ")  block%!4=x%+4:block%!12=x%+width%-4
  10043. #*  block%!8=y%-height%-4:block%!16=y%-4
  10044. $/  block%!28=-1:
  10045.  "Wimp_OpenWindow",,block%
  10046.  "Wimp_CreateMenu",,relateW%,x%+4,y%-4
  10047. redraw(relateW%)
  10048. fix_point(F$,F%)
  10049.  F$="" 
  10050.  fix%(F%) 
  10051.  -1:F$=
  10052. (V+0.5)):
  10053.  Integer
  10054.  Floating point. Do nothing
  10055. :@%=&01020009+fix%(F%)*256:F$=
  10056. (V),len%(F%)):@%=&90A
  10057. moveto(key%,P%,D%)
  10058. D%=(D%+1) 
  10059.  filter% 
  10060. 8-  P%=
  10061. next_match(P%,D%,Filter$,finished%)
  10062.  finished% 
  10063. :2    matched%+=1:$
  10064. text(filterW%,5)=
  10065. (matched%)
  10066. ;     
  10067. redraw_icon(filterW%,5)
  10068.   P%=
  10069. neighbour(key%,P%,D%)
  10070.  P%=top 
  10071.  7:finished%=
  10072. neighbour(key%,P%,D%)
  10073.  merging% 
  10074. merge_next(filter%,key%,P%) 
  10075. display(key%,P%)
  10076. next_match(P%,D%,S$,
  10077.  nomore%)
  10078.  REC%,abort%,passgo%,matched%,base%
  10079. F*dbasehandle%=
  10080. ($database%+".Database")
  10081. base%=SHmarkptr%
  10082.   P%=
  10083. neighbour(key%,P%,D%)
  10084.  P%=top 
  10085.     nomore%=
  10086. L!    P%=
  10087. neighbour(key%,P%,D%)
  10088.     passgo%+=1
  10089. N+    
  10090.  passgo%>1 
  10091.  matched% 
  10092.  abort%=
  10093.  P%=top 
  10094.     matched%=
  10095. R        
  10096. S     REC%=
  10097. rec_no(k$,key%,P%)
  10098. T'    
  10099. readsmarray(dbasehandle%,REC%)
  10100. U(    
  10101. (S$)=
  10102.  matched%=
  10103. :passgo%=0
  10104.  matched% 
  10105.  abort%
  10106. close_file(dbasehandle%)
  10107.  abort% 
  10108. softerror($Query%,113)
  10109. display(key%,P%)
  10110. ]3!block%=mainW%:
  10111.  "Wimp_GetWindowState",,block%
  10112.  template%=1 
  10113.  template%=2 
  10114.  template%=0
  10115.  I%,L%,S%,S$,k$,ok%
  10116.  -1,-2:
  10117. b,  keybase%=SHkeyptr%(0):avail%=!keybase%
  10118. d:    
  10119.  !(keybase%+avail%)>0,template%=2,design%=
  10120. :ok%=
  10121.     incr%=
  10122. ($Increment%)
  10123.  incr%>0 
  10124. h+      
  10125. change_length(RA%+incr%,
  10126. ):ok%=
  10127. i0      keybase%=SHkeyptr%(0):avail%=!keybase%
  10128.       
  10129. softerror("",2)
  10130. k        
  10131.  ok% 
  10132.       
  10133.  design%:
  10134. p0      $RecInfo%="Make adjustments to fields"
  10135. q+      
  10136. read(
  10137. ,fields%,
  10138. ,RA%,$database%)
  10139.       
  10140.  I%=1 
  10141.  fields%
  10142. sI        
  10143.  vtype$(chartype%(I%))="S" 
  10144.  chartype%(I%)<>59 
  10145.  $Rf%(I%)=""
  10146.       
  10147.  I%      
  10148.       
  10149.  template%=2:
  10150. vS      $RecInfo%="Enter data which you want to appear by default on new records"
  10151. w+      
  10152. read(
  10153. ,fields%,
  10154. ,RA%,$database%)
  10155.       
  10156.  P%=-2:
  10157. yo      rec%=!(keybase%+avail%+8+KL%(0)+1):$RecInfo%=$Subfile%(file%)+" Record="+
  10158. (rec%)+". (Copy)":key$()=""
  10159.       
  10160.  F%=1 
  10161.  fields%
  10162. {)        
  10163.  vtype$(chartype%(F%))="L" 
  10164. |7          L%=
  10165. blob_path(
  10166. ,$database%,REC%,F%,64,b$)
  10167.           
  10168.  L%>0 
  10169. ~;            L1%=
  10170. blob_path(
  10171. ,$database%,rec%,F%,64,b1$)
  10172. 7            
  10173.  "OS_CLI","Copy "+b$+" "+b1$+" ~C~V" 
  10174.           
  10175.         
  10176.       
  10177.       REC%=rec%
  10178.       
  10179.  P%=-1:
  10180. d      REC%=!(keybase%+avail%+8+KL%(0)+1):$RecInfo%=$Subfile%(file%)+" Record="+
  10181. (REC%)+". (New)"
  10182. +      
  10183.  printorder$<>"" 
  10184.  F$()=field$()
  10185. +      
  10186. read(
  10187. ,fields%,
  10188. ,RA%,$database%)
  10189. *      
  10190.  printorder$<>"" 
  10191. init_record
  10192.         
  10193. P  $RecInfo%="""Query-by-example"": Enter required values in relevant fields"
  10194. read(
  10195. ,fields%,
  10196. ,RA%,$database%)
  10197.  top:
  10198.  ### Empty subfile accessed ###
  10199. ,  keybase%=SHkeyptr%(0):avail%=!keybase%
  10200. (  REC%=!(keybase%+avail%+8+KL%(0)+1)
  10201. read(
  10202. ,fields%,
  10203. ,RA%,$database%)
  10204.  7:$RecInfo%=$Subfile%(file%)+" Record="+
  10205. (REC%)+". (New)"
  10206.   REC%=
  10207. rec_no(k$,key%,P%)
  10208. read(
  10209. ,fields%,
  10210. ,REC%,$database%)
  10211.   key$(key%)=k$
  10212.   k$=
  10213. stripright(k$,"#")
  10214.   ResKEY$=k$:ResREC%=REC%
  10215. >  $RecInfo%=$Subfile%(file%)+" Record="+
  10216. (REC%)+" Key="+k$
  10217. selected (prefsW%,43) 
  10218.  filemem%(file%,key%)=P%
  10219. text_length(mainW%,starthere%)
  10220.  Access% 
  10221. set_caret(0,mainW%,starthere%)
  10222. identify_field(starthere%)
  10223. redraw(mainW%)
  10224. selected(prefsW%,19) 
  10225. relations
  10226. changed%=
  10227. update_calcs(0)
  10228. *logentry$=$Subfile%(file%)+" "+
  10229. key(0)
  10230.  altered% 
  10231. $RecInfo%)<>"*" 
  10232.  $RecInfo%+=" *"
  10233. base%=SHmarkptr%
  10234. set_icon(markW%,0,(base%?REC%=1))
  10235.  P%=-2 
  10236. softerror("",130)
  10237. ScrollChanged%=
  10238. init_record
  10239.  I%,F%,F$
  10240.  I%=1 
  10241.  printorder$ 
  10242.   F$=
  10243. printorder$,I%,2)
  10244.   F%=
  10245. ("&"+F$)
  10246. is_a_key(F%)<>0 
  10247.  $Rf%(F%)=F$(F%)
  10248.  -------------------- Icon colours -------------------------------
  10249. colour(key%,type%)
  10250.  type%=1 - Selected key,2 - Non-selected key,3 - Not a key
  10251.  J%=0 
  10252.  KF%(key%,J%)>0 
  10253. change_field_cols(key%,type%,J%)
  10254. change_field_cols(key%,type%,fld%)
  10255.  key% 
  10256.  type% 
  10257. )    
  10258.  1:dcol%=fcol%(0):fcol%=fcol%(1)
  10259. )    
  10260.  2:dcol%=fcol%(2):fcol%=fcol%(3)
  10261.  type% 
  10262. )    
  10263.  1:dcol%=fcol%(4):fcol%=fcol%(5)
  10264. )    
  10265.  2:dcol%=fcol%(6):fcol%=fcol%(7)
  10266.  3:dcol%=&17:fcol%=&07
  10267. set_icon_cols(mainW%,desc%(KF%(key%,fld%)),dcol%)
  10268. 6col%=
  10269. get_icon_cols(mainW%,field%(KF%(key%,fld%)))
  10270.  (col% 
  10271.  16)=(fcol%(8) 
  10272.  16) 
  10273.  fcol%=(fcol% 
  10274.  &F0) 
  10275.  (col% 
  10276. set_icon_cols(mainW%,field%(KF%(key%,fld%)),fcol%)
  10277. get_icon_cols(wi%,ic%)
  10278. ;!block%=wi%:block%!4=ic%:
  10279.  "Wimp_GetIconState",,block%
  10280. =block%?27
  10281. set_icon_cols(wi%,ic%,col%)
  10282.  col%<0 
  10283.  col%=
  10284. (col%):block%!12=&0F000000 
  10285.  block%!12=&FF000000
  10286. 0!block%=wi%:block%!4=ic%:block%!8=(col%<<24)
  10287.  "Wimp_SetIconState",,block%
  10288. read_colours(f$)
  10289.  F,I%
  10290. fcol%()=7
  10291. #F,fcol%(I%)
  10292. set_icon_cols(colW%,I%,fcol%(I%))
  10293.   I%+=1
  10294. close_file(F)
  10295.  I%=0 
  10296.  Keys%
  10297. colour(I%,2)
  10298. colour(key%,1)
  10299.  I%=1 
  10300.  fields%
  10301.  link$(I%)<>"" 
  10302. set_icon_cols(mainW%,field%(I%),fcol%(8))
  10303.  mandatory%?I%=1 
  10304. set_icon_cols(mainW%,field%(I%),fcol%(9))
  10305. write_colours(f$)
  10306.  F,I%
  10307.  I%=0 
  10308. #F,fcol%(I%)
  10309. close_file(F)
  10310. find(S$,key%,disp%)
  10311.  P%,F%,H%,recnum%,abort%,cond$
  10312.  case%(key%) 
  10313. u(S$)
  10314. S$,1)="#" 
  10315.   REC%=
  10316. S$,2))
  10317.  REC%>=0 
  10318.  REC%<RA% 
  10319. *    
  10320. read(
  10321. ,fields%,
  10322. ,REC%,$database%)
  10323. $    S$=key$(key%):H%=1:recnum%=
  10324. 1    
  10325. select(searchW%,6):
  10326. deselect(searchW%,5)
  10327. $    
  10328. softerror(S$,56):abort%=
  10329. S$,KL%(key%))
  10330.  abort% 
  10331. =addr
  10332. val$=
  10333. type(key%)
  10334.  val$="VAL" 
  10335.  kl%=KL%(key%) 
  10336.  kl%=
  10337. search(S$,key%,1+H%)
  10338.  P%<0 
  10339. selected(searchW%,6) 
  10340.   F%=file%
  10341.     file%=(file%+1) 
  10342.     top=8*file%+LH%
  10343.      P%=
  10344. search(S$,key%,1+H%)
  10345.  P%>0 
  10346.  file%=F%
  10347.  P%>0 
  10348. set_subfile(file%)
  10349.  val$="VAL" 
  10350.  cond$="VAL($(SHkeyptr%(key%)+P%+8))=VAL(S$)" 
  10351.  cond$="LEFT$($(SHkeyptr%(key%)+P%+8),kl%)=S$"
  10352. matches%=0
  10353.  P%>=0 
  10354.  recnum%:RecF%=
  10355. :addr=P%:matches%=1
  10356.  P%>=0:RecF%=
  10357.  ### RecF% is used only by !DELETE in script language ###
  10358. 1  matches%=
  10359. count_matches("first",cond$,addr)
  10360. selected(searchW%,6) 
  10361. $    F%=file%:file%=(file%+1) 
  10362.         
  10363.       top=8*file%+LH%
  10364.       P%=
  10365. search(S$,key%,1)
  10366. =      
  10367.  P%>0 
  10368.  matches%+=
  10369. count_matches("first",cond$,Q%)
  10370.       file%=(file%+1) 
  10371.  file%=F%
  10372.     top=8*file%+LH%
  10373.  recnum%:
  10374. softerror("#"+
  10375. (REC%),55)
  10376.  disp% 
  10377.  addr=
  10378. (P%):flash%=KF%(key%,0):state%=
  10379. selected(mainW%,field%(flash%)) 
  10380.  addr=P%
  10381. text(searchW%,7)=
  10382. (matches%)+" found":
  10383. redraw_icon(searchW%,7)
  10384.  merging%:
  10385. merge_next(filter%,key%,addr)
  10386.  disp%:
  10387. display(key%,addr)
  10388. +    =addr
  10389. count_matches(end$,c$,
  10390.  ### Scan back to FIRST match ###
  10391.   P%=
  10392. neighbour(key%,P%,0)
  10393.  ### ...and point at it ###
  10394. neighbour(key%,P%,1)
  10395.  end$="first" 
  10396.  Q%=P%
  10397.  ### Then scan to last match ###
  10398.   N%+=1
  10399.   P%=
  10400. neighbour(key%,P%,1)
  10401.  ### ...and point at it ###
  10402. neighbour(key%,P%,0)
  10403.  end$="last" 
  10404.  Q%=P%
  10405. lookup(F%)
  10406.  K$,S%,P%,Q%,pos%
  10407. check_record 
  10408. S%=Rf%(F%)
  10409. ($S%)
  10410.  $S%<>"" 
  10411.  chartype%(F%)<9 
  10412.  "Wimp_GetCaretPosition",,block%
  10413.   pos%=block%!20:Q%=pos%
  10414.  Q%<L% 
  10415.  S%?Q%<>44
  10416.     Q%+=1
  10417.   Q%+=1
  10418.  pos%=0 
  10419.  P%=1 
  10420.  P%=pos%-1 
  10421.  P%>0 
  10422.  S%?P%<>44
  10423.     P%-=1
  10424.  P%=0 
  10425.  P%=1 
  10426.  P%+=2
  10427.   K$=
  10428. $S%,P%,Q%-P%)
  10429.   addr=
  10430. find(K$,key%,
  10431. get_it_in(filename$)
  10432.  "Hourglass_On"
  10433.  "OS_File",5,filename$ 
  10434.  d%,,ftype%
  10435. Y9ftype%=(ftype%>>8) 
  10436.  &fff:wi%=block%!20:ic%=block%!24
  10437. Z!Scroller%=
  10438. scroller_num2(wi%)
  10439. field%=(ic%+1) 
  10440.  wi%=mainW% 
  10441.  chartype%(field%) 
  10442. ^P    
  10443.  d%<>2 
  10444. transfer_blob(wi%,ic%,filename$,d%,ftype%):d%=0:ftype%=0
  10445. _F    
  10446. transfer_blob(wi%,ic%,filename$,d%,ftype%):d%=0:ftype%=0
  10447. `-    
  10448.  Stop later lines from grabbing file
  10449.  d%=2 
  10450.  wi% 
  10451.  reformW%:
  10452. f-    
  10453.  "OS_File",5,filename$+".Form" 
  10454.  d%=1 
  10455. h+      $Newform%="":
  10456. redraw_icon(wi%,12)
  10457. iI      $Reformatted%=filename$:
  10458. set_caret(0,wi%,6):
  10459. redraw_icon(wi%,6)
  10460. j)      
  10461. shade(wi%,0,
  10462. shade(wi%,2,
  10463.       
  10464. softerror("",28)
  10465. l        
  10466.  mergebaseW%:
  10467. n3    $
  10468. text(wi%,3)=filename$:
  10469. redraw_icon(wi%,3)
  10470. o7    
  10471. shade(wi%,4,
  10472. shade(wi%,7,
  10473. shade(wi%,1,
  10474. set_caret(0,wi%,4)
  10475. r!    
  10476. leaf(filename$),1) 
  10477.       
  10478.  "!":
  10479. t1      
  10480.  ### Is it an Impression document? ###
  10481. u3      
  10482.  "OS_File",5,filename$+".!DocData" 
  10483.       
  10484.  d%=1 
  10485. w"        
  10486. ready_to_merge(&2000)
  10487.         
  10488. y4        
  10489.  ### Is it a Powerbase application? ###
  10490. z;        
  10491.  "OS_File",5,filename$+".Indices" 
  10492.  d%,,type%
  10493. {$        
  10494.  d%=2 
  10495. check_record 
  10496. |.          
  10497.  present%>0 
  10498.  design%=
  10499. }$          leaf$=
  10500. leaf(filename$)
  10501. ~-          $Title%=
  10502. leaf$,2,NameLength%-1)
  10503. 1          
  10504. open_files(filename$):SaveCount%=0
  10505.         
  10506.       
  10507.       
  10508. 5      
  10509.  ### It's an ordinary directory folder ###
  10510. 1      
  10511. transfer_blob(wi%,ic%,filename$,d%,-1)
  10512.         
  10513.  ftype% 
  10514. ;    
  10515.  &7f1:
  10516. load_table(filename$,
  10517. display(key%,addr)
  10518. z    
  10519.  &7f2:
  10520.  wi%=reformW% 
  10521. leaf(filename$)="Form" 
  10522. $Reformatted%,".")=0 
  10523.  $Newform%=filename$:
  10524. redraw_icon(wi%,12)
  10525. )    
  10526.  &7f3:
  10527. load_selection(filename$)
  10528. -    
  10529.  &7f4:
  10530. load_query(filename$,wi%,ic%)
  10531. 8    
  10532.  &7f5:
  10533. get_options(printW%,printerW%,filename$)
  10534. B    
  10535.  &dfe:$
  10536. text(csvW%,13)=filename$:
  10537. start_import("CSV",wi%)
  10538. ?    
  10539.  &ff9,&aff:
  10540. transfer_blob(wi%,ic%,filename$,d%,ftype%)
  10541. +    
  10542.  &bc5,&b27:
  10543. ready_to_merge(ftype%)
  10544.  &fff:
  10545. 1    F=
  10546. (filename$):header$=
  10547. close_file(F)
  10548.  wi% 
  10549.       
  10550.  mainW%:
  10551.        
  10552.  chartype%(field%) 
  10553. ?        
  10554.  36,39:
  10555. transfer_blob(wi%,ic%,filename$,d%,ftype%)
  10556.         
  10557. 2        
  10558. header$,7)="!SCRIPT" 
  10559.  present%=7 
  10560. (          
  10561. execute_script(filename$)
  10562. D          
  10563. text(csvW%,13)=filename$:
  10564. start_import("text",wi%)
  10565.         
  10566.       
  10567. "      
  10568.  scrollerW%(Scroller%):
  10569. #      
  10570. header$,7)="!SCRIPT" 
  10571. &        
  10572. execute_script(filename$)
  10573. C        
  10574. import_to_scroller(Scroller%,filename$):
  10575. asterisk(
  10576.       
  10577. %      
  10578.  tableW%(Tablenumber%),-2:
  10579. >      $
  10580. text(csvW%,13)=filename$:
  10581. start_import("text",wi%)
  10582. :      
  10583.  customise% 
  10584. (libfunc$+"_drop(wi%,ic%)")
  10585.         
  10586.  "Hourglass_Off"
  10587. ready_to_merge(doctype%)
  10588. selected(passW%,13) 
  10589.  present%=7 
  10590.  doctype% 
  10591. A    
  10592.  &bc5:$ImpulseApp%="Impression":$mergewith%=$ImpulseApp%
  10593. A    
  10594.  &b27:$ImpulseApp%="OvationPro":$mergewith%=$ImpulseApp%
  10595.    document$=
  10596. leaf(filename$)
  10597. document$,1)="!" 
  10598.  document$=
  10599. document$,2)
  10600.  "OS_CLI","Filer_Run "+filename$
  10601.   Impulse_wait%=
  10602. softerror("",107)
  10603. open_files(f$)
  10604.  I%,J%,F%,A$
  10605.  ### Delete redundant files if present ###
  10606.  "OS_CLI","Remove "+f$+".Winsize"
  10607.  "OS_CLI","Remove "+f$+".Choices"
  10608. read_sys_vars(f$)
  10609. leaf$=
  10610. leaf(f$)
  10611.  "OS_File",5,f$+".Config" 
  10612.  d%=1 
  10613. get_configuration(f$+".Config","local")
  10614. #$Title%=
  10615. leaf$,2,NameLength%-1)
  10616.  "OS_File",5,f$+".Database" 
  10617.  d%,,type%
  10618.  d%=1 
  10619.  present%=present% 
  10620. type%=(type%>>8) 
  10621.  &fff
  10622.  type%=&7f2 
  10623. M  dbtype$="old":$Util1%="Adjust format...":$Util2%="New record format..."
  10624.  dbtype$="new":$Util1%="Alter format...":$Util2%="Rebuild database..."
  10625.  "OS_File",5,f$+".PrimaryKey" 
  10626.  d%=1 
  10627.  present%=present% 
  10628.  "OS_File",5,f$+".Form" 
  10629.  d%=1 
  10630.  present%=present% 
  10631. 9SHlogoptr%=
  10632. extend_named_sliding_block(logoanchor%,8)
  10633.  "OS_File",5,f$+".UsrSprites" 
  10634.  d%,,,,len%
  10635.  d%=1 
  10636. @  SHlogoptr%=
  10637. extend_named_sliding_block(logoanchor%,len%+8)
  10638.   !SHlogoptr%=len%+4
  10639.  "OS_File",255,f$+".UsrSprites",SHlogoptr%+4
  10640.   logosloaded%=
  10641.  "OS_File",5,f$+".Title" 
  10642.  d%,,,,len%
  10643.  d%=1 
  10644. B  SHtitleptr%=
  10645. extend_named_sliding_block(titleanchor%,len%+8)
  10646.  "OS_File",255,f$+".Title",SHtitleptr%+4
  10647.   !SHtitleptr%=len%+4
  10648.   HasTitle%=1
  10649.  HasTitle%=0
  10650. $database%=f$
  10651.  "OS_CLI","Set Dbase$Dir "+f$
  10652.  present% 
  10653.  0,1,5:Access%=
  10654. :Modify%=
  10655. resume_opening
  10656. access(f$,accessW%) 
  10657. resume_opening
  10658. wimp_error(
  10659. ,254,0,
  10660. msg("Err24"))
  10661. read_sys_vars(f$)
  10662.  E%,F,A$,L$,S$
  10663. (f$+".!Run")
  10664.   S$=
  10665. S$,"Acl$Dir")>0 
  10666.  A$=S$
  10667. S$,"Log$Dir")>0 
  10668.  L$=S$
  10669. close_file(F)
  10670.  A$="" 
  10671.  A$="Set Acl$Dir "+f$
  10672.  L$="" 
  10673.  L$="Set Log$Dir "+f$
  10674.  "XOS_ReadVarVal","Acl$Dir",,-1 
  10675.  ,,E%:
  10676.  E%=0 
  10677.  "OS_CLI",A$
  10678.  "XOS_ReadVarVal","Log$Dir",,-1 
  10679.  ,,E%:
  10680.  E%=0 
  10681.  "OS_CLI",L$
  10682. access(f$,wi%)
  10683.  F,I%,L%,P%,col%,last%,keybase%,login%,attempts%,old%,file$
  10684. 'file$=f$+".Cols":last%=8:F=
  10685. (file$)
  10686.  F=0 
  10687.  file$=f$+".Colours":last%=6:F=
  10688. (file$)
  10689.  F>0 
  10690.   old%=
  10691.  I%=0 
  10692.  last%
  10693. ,    
  10694.  last%=6 
  10695. #F,col% 
  10696. #F,fcol%(I%)
  10697. write_colours(f$+".FieldCols")
  10698. (f$+".Data")
  10699.  F=0 
  10700.  fatal_err%,
  10701. msg("Err18,"+f$+".Data")
  10702. #F,S$:$Read%=
  10703. encrypt(S$,
  10704. #F,S$:$Write%=
  10705. encrypt(S$,
  10706. #F,S$:$Manager%=
  10707. encrypt(S$,
  10708.   I%+=1
  10709. #F,Z%
  10710. set_icon(passW%,I%+8,Z%)
  10711. close_file(F)
  10712. "ShowTools%=
  10713. selected(passW%,9)
  10714.  old% 
  10715. passwords(0,passW%,4,4):
  10716.  "OS_CLI","Remove "+file$
  10717.  "OS_File",5,"<Acl$Dir>.Acl" 
  10718.  d%:acl%=(d%=1)
  10719.  $Manager%="" 
  10720.  acl%=
  10721.  Access%=
  10722. :Modify%=
  10723. 9$AccessTitle%="!Powerbase opening "+
  10724. leaf($database%)
  10725.  acl% 
  10726. position_window(wi%,0,0,0,310,0,110):refuse$="Access denied"
  10727. position_window(wi%,0,0,0,200,0,0):refuse$="Password not known"
  10728.  "Hourglass_Smash"
  10729. 0!block%=wi%:
  10730.  "Wimp_GetWindowState",,block%
  10731.  block%!4,block%!8,block%!12-block%!4,block%!16-block%!8
  10732. (  cancel%=
  10733. :login%=
  10734. :accessbutton%=0
  10735.   $Password%="":$UserID%=""
  10736. redraw_icon(wi%,1):
  10737. redraw_icon(wi%,0)
  10738. text(wi%,5)="Type in your password"
  10739.  acl% 
  10740. set_caret(0,wi%,0) 
  10741. set_caret(0,wi%,1)
  10742. poll(
  10743.  accessbutton%>0
  10744.  accessbutton% 
  10745.  2:cancel%=
  10746. '+    password$=$Password%:user$=$UserID%
  10747.  acl% 
  10748.       F=
  10749. ("<Acl$Dir>.Acl")
  10750.       
  10751. +!        
  10752. #F,id$,personal$,pw%
  10753. ,X        
  10754.  id$=
  10755. encrypt(user$,
  10756.  personal$=
  10757. encrypt(password$,
  10758.  pw%>0 
  10759.  login%=
  10760.       
  10761.  login% 
  10762.       
  10763. close_file(F)
  10764.       
  10765.       user$="<none>"
  10766.       
  10767.  password$ 
  10768. 2&        
  10769.  $Manager%:pw%=3:login%=
  10770. 3$        
  10771.  $Write%:pw%=2:login%=
  10772. 4#        
  10773.  $Read%:pw%=1:login%=
  10774.       
  10775. 6        
  10776.  (login% 
  10777.  cancel%) 
  10778.     $
  10779. text(wi%,5)=refuse$
  10780. ;!    
  10781. set_icon_cols(wi%,5,&1B)
  10782.     delay%=
  10783. =        
  10784.       
  10785. poll(
  10786. >delay%
  10787. @!    
  10788. set_icon_cols(wi%,5,&17)
  10789.     attempts%+=1
  10790. BR    att$(attempts%)=
  10791. (attempts%)+","+
  10792. leaf($database%)+","+user$+","+password$
  10793.  login% 
  10794.  cancel% 
  10795.  attempts%=3
  10796. E#Access%=(pw%>1):Modify%=(pw%>2)
  10797. close_window(wi%)
  10798.  0,0,ScreenWidth%,ScreenHeight%
  10799.  attempts%=3 
  10800. I"  user$="<unrecognised>":pw%=0
  10801. open_log("<Log$Dir>.Log",
  10802.  Even if logging not normally enabled Powerbase will log any
  10803.  three-times failed attempt to open password-protected database.
  10804.  I%=1 
  10805. N2    
  10806. write_log(-1,
  10807. msg("Err122,"+att$(I%)),"")
  10808. close_log("<Log$Dir>.Log")
  10809. close_down
  10810. =login%
  10811. resume_opening
  10812.  "Hourglass_On"
  10813. selected(passW%,16) 
  10814. open_log("<Log$Dir>.Log",
  10815. ($database%+".Subfiles")
  10816.  I%=0 
  10817. [*    
  10818.  0:$Subfile%(I%)="Subfile "+
  10819.     S$=
  10820. ^%    
  10821.  S$="" 
  10822.  S$="Subfile "+
  10823.     $Subfile%(I%)=S$
  10824. close_file(F)
  10825. load_user_functions(f$)
  10826.  "OS_File",5,f$+".FieldCols" 
  10827.  d%=1 
  10828. read_colours($database%+".FieldCols")
  10829.  "OS_File",5,f$+".PrintRes.!PrintOpts" 
  10830.  d%=1 
  10831. get_options(printW%,printerW%,f$+".PrintRes.!PrintOpts")
  10832.  "OS_File",5,f$+".Preference" 
  10833.  d%=1 
  10834. get_preferences(prefsW%,f$+".Preference")
  10835.  "OS_File",5,f$+".CSVoptions" 
  10836.  d%=1 
  10837. get_csv_options(f$+".CSVoptions")
  10838. deselect(prefsW%,36):
  10839. select(prefsW%,35):
  10840. shade(prefsW%,35,
  10841. f$,3)="RAM" 
  10842.  ram%=
  10843. tick(markM%,0,
  10844. shade(csvW%,18,Modify%)
  10845. shade(csvW%,21,Access%)
  10846. shade(printW%,31,Modify%)
  10847. shade(printW%,34,Access%)
  10848. shade(prefsW%,36,Modify%)
  10849. shade(prefsW%,38,Access%)
  10850. shade(prefsW%,45,
  10851. lit(iconbarM%,1,
  10852. lit(iconbarM%,2,Modify%)
  10853. lit(iconbarM%,3,
  10854. lit(iconbarM%,4,Modify%)
  10855. lit(mainM%,6,ShowTools% 
  10856.  (Tools%=1))
  10857. lit(miscM%,0,Access%)
  10858. lit(miscM%,1,Modify%)
  10859. lit(miscM%,2,Access%)
  10860. lit(miscM%,3,Access%)
  10861. lit(miscM%,4,Access%)
  10862. lit(miscM%,5,Access%)
  10863. lit(validateM%,0,Access%)
  10864. lit(fieldM%,0,Access%)
  10865. lit(fieldM%,2,Access%)
  10866. lit(fieldM%,3,Access%)
  10867. lit(tableM%,0,Access%)
  10868. lit(tableM%,3,Access%)
  10869. lit(designM%,2,((present% 
  10870.  4)=0))
  10871.  I%=0 
  10872. lit(utilityM%,I%,(present%=7))
  10873.  present%<4 
  10874.  design%=
  10875. :markpane%=
  10876. lit(designM%,7,
  10877. fields%=
  10878. get_form(Fptr%)
  10879. Lchartype%(0)=100:chartype%(MaxFields%+1)=100:chartype%(MaxFields%+2)=100
  10880.  fields%>0 
  10881.   starthere%=
  10882. start_at
  10883. "  Lastwritable%=
  10884. last_writable
  10885. $  fieldsM%=
  10886. field_menu(items%,1)
  10887.  $Reformatted%="" 
  10888.  adjust% 
  10889. lit(designM%,3,(fields%>0))
  10890.  present% 
  10891.   $RecInfo%=
  10892. msg("Err156")
  10893.  I%=1 
  10894. lit(designM%,I%,
  10895. lit(designM%,6,
  10896. get_winpos
  10897.  SHformptr%=0 
  10898. D    SHformptr%=
  10899. extend_named_sliding_block(formanchor%,SHclaim%)
  10900.     Fptr%=SHformptr%
  10901.      fields%=0:Fieldnumber%=0
  10902.  $Reformatted%="" 
  10903.  $RecInfo%=
  10904. msg("Err157") 
  10905.  $RecInfo%=
  10906. msg("Err159")
  10907. first_writable>0 
  10908. lit(designM%,4,
  10909. lit(designM%,5,
  10910. get_winpos
  10911.   $RecInfo%=
  10912. msg("Err158")
  10913.  "OS_File",5,$database%+".Database" 
  10914.  ,,,,len%
  10915. -  RA%=(len% 
  10916.  Length%)-1:$Records%=
  10917. (RA%)
  10918. first_writable>0 
  10919. get_winpos
  10920. lit(utilityM%,0,
  10921. complete(4)
  10922. softerror("",203)
  10923. shade(prefsW%,45,
  10924. lit(mainM%,8,
  10925. selected(passW%,13))
  10926. lit(mainM%,9,
  10927. selected(passW%,13))
  10928. lit(mainM%,10,
  10929. selected(passW%,13))
  10930. lit(mainM%,2,
  10931. selected(passW%,14))
  10932.  "OS_File",5,$database%+".Database" 
  10933.  ,,,,len%
  10934.   RA%=(len% 
  10935.  Length%)-1
  10936.   $Records%=
  10937. (RA%)
  10938.  (len% 
  10939.  Length%)<>0 
  10940. rectify
  10941. @  SHmarkptr%=
  10942. extend_named_sliding_block(markanchor%,RA%+20)
  10943. clear_marks(RA%)
  10944. load_index($database%+".PrimaryKey",0,
  10945. (  key%=0:file%=0:
  10946. set_subfile(file%)
  10947. #  $Subfilename%=$Subfile%(key%)
  10948. set_keydata(key%)
  10949. X  keybase%=SHkeyptr%(0):
  10950.  keybase%!4>0 
  10951.  $Increment%=
  10952. (keybase%!4) 
  10953.  $Increment%="0"
  10954. load_indices
  10955. get_tables
  10956. load_marks
  10957. count(key%,RU%):
  10958. update_stats
  10959. get_winpos
  10960. load_calcs
  10961. auto_csv(
  10962. selected(prefsW%,44))
  10963. limit_actions(Access%,
  10964.   addr=
  10965. moveto(key%,top,1)
  10966.  "Hourglass_Off"
  10967. iconbar_icon($Title%)
  10968. Apath$=$database%+".Customise.":name$=$Title%:lib$=path$+name$
  10969.  "OS_File",5,lib$ 
  10970.  d%,,,,len%
  10971.  d%=0 
  10972.  name$="Demo":lib$=path$+name$:
  10973.  "OS_File",5,lib$ 
  10974.  d%,,,,len%
  10975.  d%=0 
  10976. 0  path$=PbaseDir$+"."+program$+".Customise."
  10977. G  name$=progname$:lib$=path$+name$:
  10978.  "OS_File",5,lib$ 
  10979.  d%,,,,len%
  10980.  d%=0 
  10981.  name$="Demo":lib$=path$+name$:
  10982.  "OS_File",5,lib$ 
  10983.  d%,,,,len%
  10984. delete_icons(keypadW%,29):toolheight%=770:padheight%=316
  10985.  d%=1 
  10986.   libfunc$="FN_"+name$
  10987.   N%=-1
  10988.  N%+=1
  10989.  lib$(N%)=lib$ 
  10990.  N%=NextLib%
  10991. loadable 
  10992. =    lib%(N%)=
  10993.  Flag used libraries to avoid memory leak
  10994.  library$ 
  10995.       
  10996.  lib$:new%=
  10997.        
  10998. :library$=lib$:new%=
  10999.         
  11000.  Tools% 
  11001. .      
  11002.  1:xm%=600:ym%=-208:xw%=12:yw%=-208
  11003. -      
  11004.  2:xm%=92:ym%=-816:xw%=12:yw%=-816
  11005.         
  11006. J    customise%=
  11007. (libfunc$+"_setup(LEFT$(path$),xm%,ym%,xw%,yw%,new%)")
  11008.  Tools%=2 
  11009. open_window(mainW%)
  11010. exit%=
  11011.  special%(0) 
  11012. (libfunc$+"_function(0)")
  11013. loadable
  11014.     ok%=
  11015.  N%=MaxLibs%:
  11016. softerror("",236):ok%=
  11017.  N%=NextLib%:
  11018. unique(lib$,N%+1) 
  11019. O    
  11020.  name$<>"Demo" 
  11021. dir($database%)<>CustDir$ 
  11022. softerror(CustDir$,134)
  11023. #    lib$(N%)=lib$:NextLib%+=1  
  11024. 1    
  11025.  len%>MaxSize% 
  11026.  MaxSize%=len%:
  11027.  lib$()
  11028. clear_marks(N%)
  11029.  I%=0 
  11030.   SHmarkptr%!I%=0
  11031. deselect(markW%,0)
  11032. shade(markW%,1,
  11033. MarkedRecs%=0
  11034. save_marks
  11035. selected(prefsW%,48) 
  11036.   f$=$database%+".Marks"
  11037.  MarkedRecs%>0 
  11038. C    
  11039. ticked(markM%,1) 
  11040.  SHmarkptr%?RA%=255 
  11041.  SHmarkptr%?RA%=1
  11042. &    SHmarkptr%!(RA%+1)=MarkedRecs%
  11043. 2    
  11044. save(f$,&ffd,SHmarkptr%,SHmarkptr%+RA%+5)
  11045. "    
  11046.  "OS_CLI","Remove "+f$
  11047. load_marks
  11048.  d%,f$
  11049. selected(prefsW%,48) 
  11050.   f$=$database%+".Marks"
  11051.  "OS_File",5,f$ 
  11052.  d%=1 
  11053. &    
  11054.  "OS_File",255,f$,SHmarkptr%
  11055. &    MarkedRecs%=SHmarkptr%!(RA%+1)
  11056. (    
  11057. tick(markM%,0,SHmarkptr%?RA%=1)
  11058. *    
  11059. tick(markM%,1,SHmarkptr%?RA%=255)
  11060. warn_of_marks
  11061. rectify
  11062.  REC%,I%,J%,F$
  11063. REC%=-1
  11064.  %*dbasehandle%=
  11065. ($database%+".Database")
  11066.  REC%<RA% 
  11067. (F$)<>0
  11068.   REC%+=1
  11069.  (!  
  11070. #dbasehandle%=Length%*REC%
  11071.   F$=
  11072. #dbasehandle%
  11073. (F$)=0 
  11074. softerror("",109)
  11075.  -!  
  11076. #dbasehandle%=REC%*Length%
  11077.  "Hourglass_On"
  11078.  I%=REC% 
  11079.  0!    
  11080. #dbasehandle%=I%*Length%
  11081.  J%=1 
  11082.  fields%
  11083.       
  11084. #dbasehandle%,""
  11085.  4>    
  11086.  "Hourglass_Percentage",((I%-REC%)*100) 
  11087.  (RA%-REC%)
  11088.  "Hourglass_Off"
  11089.  RA%+=1
  11090. #dbasehandle%=(RA%+1)*Length%
  11091. close_file(dbasehandle%)
  11092. get_configuration(f$,z$)
  11093.  F,S$,C$,P%
  11094.   S$=
  11095. S$,1)<>"|" 
  11096.  C+  P%=
  11097. S$," "):C$=
  11098. S$,P%+1):S$=
  11099. S$,P%-1)
  11100.   C$=
  11101. stripright(C$," ")
  11102.       
  11103.  "Fields":
  11104.  G(      
  11105.  z$="main" 
  11106.  MaxFields%=
  11107.  H>      
  11108.  MaxFields%>127 
  11109. close_file(F):
  11110. msg("Err185")
  11111.  I/      
  11112.  "Keys":
  11113.  z$="main" 
  11114.  MaxKeys%=
  11115.  J/      
  11116.  "Tabs":
  11117.  z$="main" 
  11118.  MaxTabs%=
  11119.  K1      
  11120.  "Cols":
  11121.  z$="main" 
  11122.  MaxCols%=
  11123. (C$)-1
  11124.  L3      
  11125.  "Scrolls":
  11126.  z$="main" 
  11127.  MaxLists%=
  11128.  M2      
  11129.  "MaxLibs":
  11130.  z$="main" 
  11131.  MaxLibs%=
  11132.  N/      
  11133.  "CustDir":
  11134.  z$="main" 
  11135.  CustDir$=C$
  11136.  O-      
  11137.  C$="Default" 
  11138.  CustDir$=PbaseDir$
  11139.  P7      
  11140.  "BTime":
  11141.  z$="main" 
  11142.  Bannertime%=
  11143. (C$)*100
  11144.  Q9      
  11145.  "LeftOpen":
  11146.  z$="main" 
  11147.  leftmenu%=(C$="YES")
  11148.  R.      
  11149.  "Tools":
  11150.  z$="main" 
  11151.  Tools%=
  11152.  S$      
  11153.  "BackGnd":winback%=
  11154.  T"      
  11155.  "Upper":uc%=(C$="YES")
  11156.  U!      
  11157.  "DirOpts":dirdisp$=C$
  11158.  V"      
  11159.  "ExtFiles":objname$=C$
  11160.  W#      
  11161.  "Query":QBE%=(C$="QBE")
  11162.  X_      
  11163.  "PathLen":RLmax%=
  11164. (C$):
  11165. C$)="A" 
  11166.  Remotepath$="Absolute" 
  11167.  Remotepath$="Relative"
  11168.  Y,      
  11169.  "FontAdj":FontAdjust%=(C$="YES")
  11170.  Z)      
  11171.  "Multi":multitask%=(C$="YES")
  11172.  [+      
  11173.  "MarkPane":markpane%=(C$="YES")
  11174.  \'      
  11175.  "NameLen":NameLength%=
  11176.  ]@      
  11177.  "ButtonAtts":Buttonwidth%=
  11178. (C$):WithLeaf%=(
  11179. C$)="L")
  11180.  ^,      
  11181.  "DialDelay":DialDelay%=
  11182. (C$)*100
  11183.  _)      
  11184.  "TimeFirst":TimeFirst$=
  11185. C$,1)
  11186.  `+      
  11187.  "FullTime":FullTime%=(C$="YES")
  11188.  a*      
  11189.  "CentChange":CentChange%=
  11190.  b"      
  11191.  "Output":Output%=
  11192.  c        
  11193. close_file(F)
  11194. get_options(wi%,wi2%,f$)
  11195.  F,S$,C$,P%
  11196. f$,20)="Resources.!PrintOpts" 
  11197.  prtopts$="" 
  11198.  prtopts$=f$
  11199.   S$=
  11200. S$,1)<>"|" 
  11201.     P%=
  11202. S$," ")
  11203.  q2    
  11204.  P%>0 
  11205. S$,P%+1):S$=
  11206. S$,P%-1) 
  11207.  C$=""
  11208.       
  11209.  "Destination":
  11210.  t-      
  11211. deselect(wi%,
  11212. selected_esg(wi%,4))
  11213.       
  11214.         
  11215.  "window":ic%=22
  11216.         
  11217.  "file":ic%=23
  11218.         
  11219.  "printer":ic%=25
  11220.       
  11221.       
  11222. select(wi%,ic%)
  11223.       
  11224. set_dest_sprite
  11225.       
  11226.  "Headings":
  11227.  }-      
  11228. deselect(wi%,
  11229. selected_esg(wi%,1))
  11230.       
  11231. )        
  11232.  "descriptor":
  11233. select(wi%,2)
  11234. "        
  11235.  "tag":
  11236. select(wi%,1)
  11237. %        
  11238.  "none":
  11239. select(wi%,36) 
  11240.       
  11241.       
  11242.  "Format":
  11243. -      
  11244. deselect(wi%,
  11245. selected_esg(wi%,3))
  11246. /      
  11247. deselect(wi2%,
  11248. selected_esg(wi2%,2))
  11249.       
  11250. C$,5) 
  11251. %        
  11252.  "horiz":
  11253. select(wi%,15)
  11254. $        
  11255.  "vert":
  11256. select(wi%,16)
  11257. %        
  11258.  "table":
  11259. select(wi2%,7)
  11260. %        
  11261.  "label":
  11262. select(wi2%,8)
  11263.       
  11264.       
  11265.  "Scroller":
  11266. -      
  11267. deselect(wi%,
  11268. selected_esg(wi%,6))
  11269.       
  11270. *        
  11271.  "Single row":
  11272. select(wi%,40)
  11273. '        
  11274.  "Columns":
  11275. select(wi%,41)
  11276.       
  11277. '      
  11278.  "CellSep":$
  11279. text(wi%,50)=C$
  11280. '      
  11281.  "RowTerm":$
  11282. text(wi%,51)=C$
  11283.       
  11284.  "ShrinkRow":
  11285. %      
  11286. set_icon(wi%,43,(C$="ON"))
  11287. *      
  11288. shade(wi%,43,
  11289. selected(wi%,40))
  11290. *      
  11291. shade(wi%,51,
  11292. selected(wi%,40))
  11293. /      
  11294.  "Expand":
  11295. set_icon(wi%,5,(C$="ON"))
  11296. 3      
  11297.  "ExpHeader":
  11298. set_icon(wi%,37,(C$="ON"))
  11299. 2      
  11300.  "Uppercase":
  11301. set_icon(wi%,6,(C$="ON"))
  11302. 0      
  11303.  "Header":
  11304. set_icon(wi%,28,(C$="ON"))
  11305. .      
  11306.  "Page1":
  11307. set_icon(wi%,4,(C$="ON"))
  11308. 0      
  11309.  "Footer":
  11310. set_icon(wi%,29,(C$="ON"))
  11311. .      
  11312.  "Date":
  11313. set_icon(wi%,11,(C$="ON"))
  11314. 0      
  11315.  "Shrink":
  11316. set_icon(wi%,24,(C$="ON"))
  11317. 4      
  11318.  "PageNumber":
  11319. set_icon(wi%,35,(C$="ON"))
  11320. )      
  11321.  "PageLength":$
  11322. text(wi%,9)=C$
  11323. %      
  11324.  "Title":$
  11325. text(wi%,10)=C$
  11326. )      
  11327.  "TextWidth":$
  11328. text(wi%,18)=C$
  11329. ,      
  11330.  "ColumnSpacer":$
  11331. text(wi%,26)=C$
  11332.       
  11333.  "Orientation":
  11334. /      
  11335. deselect(wi2%,
  11336. selected_esg(wi2%,1))
  11337.       
  11338. '        
  11339.  "upright":
  11340. select(wi2%,3)
  11341. (        
  11342.  "sideways":
  11343. select(wi2%,4)
  11344.         
  11345. select(wi2%,3)
  11346.       
  11347.       
  11348.  "PrintCols":
  11349. /      
  11350. deselect(wi2%,
  11351. selected_esg(wi2%,9))
  11352.       
  11353. "        
  11354.  "1":
  11355. select(wi2%,80)
  11356. "        
  11357.  "2":
  11358. select(wi2%,81)
  11359. "        
  11360.  "3":
  11361. select(wi2%,85)
  11362. "        
  11363.  "4":
  11364. select(wi2%,86)
  11365.         
  11366. select(wi2%,80)
  11367.       
  11368. .      
  11369. shade(wi2%,82,
  11370. selected(wi2%,80))
  11371. '      
  11372.  "Gutter":$
  11373. text(wi2%,82)=C$
  11374. +      
  11375.  "HeaderFont":$
  11376. text(wi2%,57)=C$
  11377. )      
  11378.  "BodyFont":$
  11379. text(wi2%,71)=C$
  11380.       
  11381.  "FontSize":
  11382. /      
  11383. deselect(wi2%,
  11384. selected_esg(wi2%,7))
  11385.       
  11386. shade(wi2%,65,
  11387.       
  11388. "        
  11389.  "8":
  11390. select(wi2%,61)
  11391. #        
  11392.  "10":
  11393. select(wi2%,62)
  11394. #        
  11395.  "12":
  11396. select(wi2%,63)
  11397. #        
  11398.  "14":
  11399. select(wi2%,64)
  11400. 2        
  11401. text(wi2%,65)=C$:
  11402. shade(wi2%,65,
  11403.       
  11404. 2      
  11405.  "Hcolour":
  11406. set_icon_cols(wi%,53,
  11407. (C$))
  11408. 2      
  11409.  "Bcolour":
  11410. set_icon_cols(wi%,54,
  11411. (C$))
  11412. 2      
  11413.  "Rcolour":
  11414. set_icon_cols(wi%,55,
  11415. (C$))
  11416.       
  11417.  "Margins":
  11418.        live%()=14,15,16,18,-1
  11419.       
  11420.  C$="printer" 
  11421. ,        
  11422. select(wi2%,68):
  11423. enable(wi2%,
  11424. 0        
  11425. deselect(wi2%,68):
  11426. enable(wi2%,
  11427.       
  11428.         
  11429. (      
  11430.  "Lmargin":$
  11431. text(wi2%,14)=C$
  11432. (      
  11433.  "Rmargin":$
  11434. text(wi2%,15)=C$
  11435. (      
  11436.  "Tmargin":$
  11437. text(wi2%,16)=C$
  11438. (      
  11439.  "Bmargin":$
  11440. text(wi2%,18)=C$
  11441.       
  11442.  "LineSpace":
  11443. !      
  11444. C$)<>"%" 
  11445.  C$="120%"
  11446.       $
  11447. text(wi2%,56)=C$
  11448. '      
  11449.  "Copies":$
  11450. text(wi2%,45)=C$
  11451.       
  11452.  "TabColumns":
  11453.       P%=
  11454. C$,",")
  11455. #      $
  11456. text(wi2%,23)=
  11457. C$,P%-1)
  11458. #      $
  11459. text(wi2%,24)=
  11460. C$,P%+1)
  11461. <      
  11462.  "ExtraRows":$
  11463. text(wi2%,69)=
  11464. (C$))            
  11465.       
  11466.  "LabelRowOf":
  11467. /      
  11468. deselect(wi2%,
  11469. selected_esg(wi2%,5))
  11470.       
  11471. (C$) 
  11472.          
  11473. select(wi2%,28)
  11474.          
  11475. select(wi2%,29)
  11476.          
  11477. select(wi2%,30)
  11478.          
  11479. select(wi2%,53)
  11480.       
  11481. +      
  11482.  "LabelWidth":$
  11483. text(wi2%,32)=C$
  11484. ,      
  11485.  "LabelHeight":$
  11486. text(wi2%,34)=C$
  11487.       
  11488.  "Substitute":
  11489.       P%=
  11490. C$,"|")
  11491.       
  11492.  P%>0 
  11493.         
  11494. select(wi2%,39)
  11495. %        $
  11496. text(wi2%,78)=
  11497. C$,P%-1)
  11498. %        $
  11499. text(wi2%,40)=
  11500. C$,P%+1)
  11501. F        
  11502. deselect(wi2%,39):$
  11503. text(wi2%,78)="":$
  11504. text(wi2%,40)=""
  11505.       
  11506. 7      
  11507. shade(wi2%,78,(P%>0)):
  11508. shade(wi2%,40,(P%>0))
  11509. *      
  11510.  "FirstLine":$
  11511. text(wi2%,51)=C$
  11512. )      
  11513.  "LastLine":$
  11514. text(wi2%,52)=C$
  11515. 3      
  11516.  "PrintKey":
  11517. set_icon(wi2%,41,(C$="ON"))
  11518.       
  11519.  "Units":
  11520. /      
  11521. deselect(wi2%,
  11522. selected_esg(wi2%,8))
  11523.       
  11524. #        
  11525.  "mm":
  11526. select(wi2%,48)
  11527. #        
  11528.  "in":
  11529. select(wi2%,38)
  11530. #        
  11531.  "pt":
  11532. select(wi2%,77)
  11533.       
  11534.       
  11535. label_units(C$)
  11536.       
  11537.  "SortOn":
  11538. $      
  11539. set_icon(wi%,46,(C$<>""))
  11540.       $
  11541. text(wi%,44)=C$
  11542. !      
  11543. shade(wi%,44,(C$<>""))
  11544. 0      
  11545.  "SortDir":
  11546. set_icon(wi%,47,(C$="A"))
  11547. 0      
  11548.  "Pause":
  11549. set_icon(wi2%,87,(C$="ON"))
  11550.         
  11551. close_file(F)
  11552. enable_print_setup(wi%,wi2%)
  11553. save_options(wi%,wi2%,f$)
  11554. selected_esg(wi%,4) 
  11555.  23:C$="file"
  11556.  25:C$="printer"
  11557. :C$="window"
  11558. #F,"Destination "+C$
  11559. selected_esg(wi%,1) 
  11560.  2:C$="descriptor"
  11561.  36:C$="none"
  11562. :C$="tag"
  11563. #F,"Headings "+C$
  11564. selected(wi%,16):C$="vert"
  11565. selected(wi2%,7):C$="table"
  11566. selected(wi2%,8):C$="label"
  11567. :C$="horiz"
  11568. #F,"Format "+C$
  11569. selected_esg(wi%,6) 
  11570.  41:C$="Columns"
  11571. :C$="Single row"
  11572. #F,"Scroller "+C$
  11573. #F,"CellSep "+$
  11574. text(wi%,50)
  11575. #F,"RowTerm "+$
  11576. text(wi%,51)
  11577. selected(wi%,43) 
  11578.  C$="ON" 
  11579.  C$="OFF"
  11580. #F,"ShrinkRow "+C$
  11581. selected(wi%,5) 
  11582.  C$="ON" 
  11583.  C$="OFF"
  11584. #F,"Expand "+C$
  11585. selected(wi%,37) 
  11586.  C$="ON" 
  11587.  C$="OFF"
  11588. #F,"ExpHeader "+C$
  11589. selected(wi%,6) 
  11590.  C$="ON" 
  11591.  C$="OFF"
  11592. #F,"Uppercase "+C$
  11593. selected(wi%,28) 
  11594.  C$="ON" 
  11595.  C$="OFF"
  11596. #F,"Header "+C$
  11597. selected(wi%,4) 
  11598.  C$="ON" 
  11599.  C$="OFF"
  11600. #F,"Page1 "+C$
  11601. selected(wi%,29) 
  11602.  C$="ON" 
  11603.  C$="OFF"
  11604. #F,"Footer "+C$
  11605. selected(wi%,11) 
  11606.  C$="ON" 
  11607.  C$="OFF"
  11608. #F,"Date "+C$
  11609. selected(wi%,24) 
  11610.  C$="ON" 
  11611.  C$="OFF"
  11612. #F,"Shrink "+C$
  11613. selected(wi%,35) 
  11614.  C$="ON" 
  11615.  C$="OFF"
  11616. #F,"PageNumber "+C$
  11617. #F,"PageLength "+$
  11618. text(wi%,9)
  11619. #F,"Title "+$
  11620. text(wi%,10)
  11621. #F,"TextWidth "+$
  11622. text(wi%,18)
  11623. #F,"ColumnSpacer "+$
  11624. text(wi%,26)
  11625. selected_esg(wi2%,1) 
  11626.  4:C$="sideways"
  11627. :C$="upright"
  11628. #F,"Orientation "+C$
  11629. selected_esg(wi2%,9) 
  11630.  81:C$="2"
  11631.  85:C$="3"
  11632.  86:C$="4"
  11633. :C$="1"
  11634. #F,"PrintCols "+C$
  11635. #F,"Gutter "+$
  11636. text(wi2%,82)
  11637. #F,"HeaderFont "+$
  11638. text(wi2%,57)
  11639. #F,"BodyFont "+$
  11640. text(wi2%,71)
  11641. selected_esg(wi2%,7) 
  11642.  61:C$="8"
  11643.  62:C$="10"
  11644.  63:C$="12"
  11645.  64:C$="14"
  11646. :C$=$
  11647. text(wi2%,65)
  11648. #F,"FontSize "+C$
  11649. !P C$=
  11650. get_icon_cols(wi%,53))
  11651. #F,"Hcolour "+C$
  11652. !R C$=
  11653. get_icon_cols(wi%,54))
  11654. #F,"Bcolour "+C$
  11655. !T C$=
  11656. get_icon_cols(wi%,55))
  11657. #F,"Rcolour "+C$
  11658. selected(wi2%,68) 
  11659.  C$="printer" 
  11660.  C$="program"
  11661. #F,"Margins "+C$
  11662. #F,"Lmargin "+$
  11663. text(wi2%,14)
  11664. #F,"Rmargin "+$
  11665. text(wi2%,15)
  11666. #F,"Tmargin "+$
  11667. text(wi2%,16)
  11668. #F,"Bmargin "+$
  11669. text(wi2%,18)
  11670. text(wi2%,56)
  11671. C$)<>"%" 
  11672.  C$+="%"
  11673. #F,"LineSpace "+C$
  11674. #F,"Copies "+$
  11675. text(wi2%,45)
  11676. #F,"TabColumns "+$
  11677. text(wi2%,23)+","+$
  11678. text(wi2%,24)
  11679. #F,"ExtraRows "+$
  11680. text(wi2%,69)
  11681. selected_esg(wi2%,5) 
  11682.  28:C%=1
  11683.  29:C%=2
  11684.  53:C%=4
  11685. :C%=3
  11686. #F,"LabelRowOf "+C$
  11687. #F,"LabelWidth "+$
  11688. text(wi2%,32)
  11689. #F,"LabelHeight "+$
  11690. text(wi2%,34)
  11691. selected(wi2%,39) 
  11692.  C$=$
  11693. text(wi2%,78)+"|"+$
  11694. text(wi2%,40) 
  11695.  C$="OFF"
  11696. #F,"Substitute "+C$
  11697. #F,"FirstLine "+$
  11698. text(wi2%,51)
  11699. #F,"LastLine "+$
  11700. text(wi2%,52)
  11701. selected(wi2%,41) 
  11702.  C$="ON" 
  11703.  C$="OFF"
  11704. #F,"PrintKey "+C$
  11705. selected_esg(wi2%,8) 
  11706.  38:C$="in"
  11707.  77:C$="pt"
  11708. :C$="mm"
  11709. #F,"Units "+C$
  11710. selected(wi%,46) 
  11711.  C$=$
  11712. text(wi%,44) 
  11713.  C$=""
  11714. #F,"SortOn "+C$
  11715. selected(wi%,47) 
  11716.  C$="A" 
  11717.  C$="D"
  11718. #F,"SortDir "+C$
  11719. selected(wi2%,87) 
  11720.  C$="ON" 
  11721.  C$="OFF"
  11722. #F,"Pause "+C$
  11723. close_file(F)
  11724.  "OS_File",18,f$,&7f5
  11725. get_preferences(wi%,f$)
  11726.  F,S$,C$,P%
  11727.   S$=
  11728. S$,1)<>"|" 
  11729. -    P%=
  11730. S$," "):C$=
  11731. S$,P%+1):S$=
  11732. S$,P%-1)
  11733. (      
  11734.  "DateSeparator":$datesep%=C$
  11735. (      
  11736.  "TimeSeparator":$timesep%=C$
  11737.       
  11738.  "WildcardS":$wc%=C$
  11739.       
  11740.  "WildcardM":$ws%=C$
  11741. 5      
  11742.  "Recalculate":
  11743. set_icon(wi%,14,(C$="ON"))
  11744. @      
  11745.  "NewCopy":kill%=(C$<>"ON"):
  11746. set_icon(wi%,12,
  11747.  kill%)
  11748. U      
  11749.  "CaseSpecific":
  11750. set_icon(wi%,30,(C$="ON")):
  11751. set_icon(queryW%,1,(C$="ON"))
  11752. 5      
  11753.  "BlankRecord":
  11754. set_icon(wi%,15,(C$="ON"))
  11755. 8      
  11756.  "MoveDescriptor":
  11757. set_icon(wi%,16,(C$="ON"))
  11758. C      
  11759.  "ImpulseClient":$mergewith%=C$:$ImpulseApp%=$mergewith%
  11760. P      
  11761.  "Validate":
  11762. set_icon(wi%,21,(C$="ON")):
  11763. shade(keypadW%,18,(C$="ON"))
  11764. 4      
  11765.  "ShowLinked":
  11766. set_icon(wi%,19,(C$="ON"))
  11767. 1      
  11768.  "Warning":
  11769. set_icon(wi%,20,(C$="ON"))
  11770.       
  11771.  "Autosave":
  11772. -      
  11773. deselect(wi%,
  11774. selected_esg(wi%,2))
  11775.       
  11776. C$,4) 
  11777. /        
  11778.  "OFF":autosave%=0:$Interval%="10"
  11779. 2        
  11780.  "WARN":autosave%=1:$Interval%=
  11781. C$,5)
  11782. 2        
  11783.  "AUTO":autosave%=2:$Interval%=
  11784. C$,5)
  11785.       
  11786. #      
  11787. select(wi%,29-autosave%)
  11788. '      
  11789. shade(wi%,25,(autosave%<>0))
  11790.       
  11791.  "Autobalance":
  11792.       
  11793. C$,4) 
  11794. /        
  11795.  "OFF":autobalance%=
  11796. :$Every%="25"
  11797. 2        
  11798.  "AUTO":$Every%=
  11799. C$,5):autobalance%=
  11800.       
  11801. I      
  11802. set_icon(wi%,31,autobalance%):
  11803. shade(wi%,32,
  11804. selected(wi%,31))
  11805. ,      
  11806.  "Duplication":dupwarn%=(C$="ON")
  11807. L      
  11808. set_icon(wi%,34,dupwarn%):
  11809. shade(prefsW%,34,
  11810. selected(passW%,15))
  11811. 5      
  11812.  "DefaultAction":
  11813. set_icon(wi%,41,C$="ON")
  11814. 4      
  11815.  "StripLeading":
  11816. set_icon(wi%,47,C$="ON")
  11817. 5      
  11818.  "StripTrailing":
  11819. set_icon(wi%,42,C$="ON")
  11820. 5      
  11821.  "RememberPlace":
  11822. set_icon(wi%,43,C$="ON")
  11823. 2      
  11824.  "SaveMarked":
  11825. set_icon(wi%,48,C$="ON")
  11826. /      
  11827.  "AutoCSV":
  11828. set_icon(wi%,44,C$="ON")
  11829. 0      
  11830.  "AutoOpen":
  11831. set_icon(wi%,49,C$="ON")
  11832. &      
  11833.  "SaveStart":$StartHere%=C$
  11834.         
  11835. close_file(F)
  11836. save_preferences(wi%,f$)
  11837.  F,C$
  11838. #F,"DateSeparator "+$datesep%
  11839. #F,"TimeSeparator "+$timesep%
  11840. #F,"WildcardS "+$wc%
  11841. #F,"WildcardM "+$ws%
  11842. #F,"ImpulseClient "+$mergewith%
  11843. selected(wi%,12) 
  11844.  C$="ON" 
  11845.  C$="OFF"
  11846. #F,"NewCopy "+C$
  11847. selected(wi%,30) 
  11848.  C$="ON" 
  11849.  C$="OFF"
  11850. #F,"CaseSpecific "+C$
  11851. selected(wi%,14) 
  11852.  C$="ON" 
  11853.  C$="OFF"
  11854. #F,"Recalculate "+C$
  11855. selected(wi%,15) 
  11856.  C$="ON" 
  11857.  C$="OFF"
  11858. #F,"BlankRecord "+C$
  11859. selected(wi%,16) 
  11860.  C$="ON" 
  11861.  C$="OFF"
  11862. #F,"MoveDescriptor "+C$
  11863. selected(wi%,21) 
  11864.  C$="ON" 
  11865.  C$="OFF"
  11866. #F,"Validate "+C$
  11867. selected(wi%,19) 
  11868.  C$="ON" 
  11869.  C$="OFF"
  11870. #F,"ShowLinked "+C$
  11871. selected(wi%,20) 
  11872.  C$="ON" 
  11873.  C$="OFF"
  11874. #F,"Warning "+C$
  11875.  autosave% 
  11876.  0:C$="OFF"
  11877.  1:C$="WARN"+$Interval%
  11878.  2:C$="AUTO"+$Interval%
  11879. #F,"Autosave "+C$
  11880.  autobalance% 
  11881. :C$="OFF"
  11882. :C$="AUTO"+$Every%
  11883. #F,"Autobalance "+C$
  11884. selected(prefsW%,34) 
  11885.  C$="ON" 
  11886.  C$="OFF"
  11887. #F,"Duplication "+C$
  11888. selected(prefsW%,41) 
  11889.  C$="ON" 
  11890.  C$="OFF"
  11891. #F,"DefaultAction "+C$
  11892. selected(prefsW%,47) 
  11893.  C$="ON" 
  11894.  C$="OFF"
  11895. #F,"StripLeading "+C$
  11896. selected(prefsW%,42) 
  11897.  C$="ON" 
  11898.  C$="OFF"
  11899. #F,"StripTrailing "+C$
  11900. selected(prefsW%,43) 
  11901.  C$="ON" 
  11902.  C$="OFF"
  11903. #F,"RememberPlace "+C$
  11904. selected(prefsW%,48) 
  11905.  C$="ON" 
  11906.  C$="OFF"
  11907. #F,"SaveMarked "+C$
  11908. selected(prefsW%,44) 
  11909.  C$="ON" 
  11910.  C$="OFF"
  11911. #F,"AutoCSV "+C$
  11912. selected(prefsW%,49) 
  11913.  C$="ON" 
  11914.  C$="OFF"
  11915. #F,"AutoOpen "+C$
  11916. C$=$StartHere%
  11917.  C$<>"" 
  11918. #F,"SaveStart "+C$
  11919. close_file(F)
  11920.  "OS_File",18,f$,&fff
  11921. get_csv_options(f$)
  11922.  F,S$,C$,P%
  11923.   S$=
  11924. S$,1)<>"|" 
  11925. -    P%=
  11926. S$," "):C$=
  11927. S$,P%+1):S$=
  11928. S$,P%-1)
  11929.       
  11930.  "Separator":
  11931.       $Delim%=""
  11932.       
  11933. #        
  11934.  "Comma":sep$=",":P%=0
  11935. "        
  11936.  "TAB":sep$=
  11937. (9):P%=1
  11938. "        
  11939.  "CR":sep$=
  11940. (13):P%=2
  11941. "        
  11942.  "LF":sep$=
  11943. (10):P%=3
  11944. %        
  11945.  $Delim%=C$:sep$=C$:P%=4
  11946.       
  11947. '      
  11948. tick_one(delimiterM%,0,3,P%)
  11949. 4      $
  11950. text(csvW%,14)=C$:
  11951. redraw_icon(csvW%,14)
  11952.       
  11953.  "Terminator":
  11954.       $Termin%=""
  11955.       
  11956. #        
  11957.  "CR":term$=
  11958. (13):P%=0
  11959. #        
  11960.  "LF":term$=
  11961. (10):P%=1
  11962. ,        
  11963.  "CR LF":term$=
  11964. (13)+
  11965. (10):P%=2
  11966. ,        
  11967.  "LF CR":term$=
  11968. (10)+
  11969. (13):P%=3
  11970. "    ,        
  11971.  "CR CR":term$=
  11972. (13)+
  11973. (13):P%=4
  11974. ,        
  11975.  "LF LF":term$=
  11976. (10)+
  11977. (10):P%=5
  11978. (        
  11979. : $Termin%=C$:term$=C$:P%=6
  11980.       
  11981. (      
  11982. tick_one(terminatorM%,0,5,P%)
  11983. 4      $
  11984. text(csvW%,15)=C$:
  11985. redraw_icon(csvW%,15)
  11986.       
  11987.  "ScrollTerm":
  11988.       $Scrterm%=""
  11989.       
  11990. .        
  11991.  "Semicolon":scrollterm$=";":P%=0
  11992. *        
  11993.  "Comma":scrollterm$=",":P%=1
  11994. )        
  11995.  "TAB":scrollterm$=
  11996. (9):P%=2
  11997. *        
  11998.  "Space":scrollterm$=" ":P%=3
  11999. .        
  12000.  $Scrterm%=C$:scrollterm$=C$:P%=4
  12001.       
  12002. (      
  12003. tick_one(scrolltermM%,0,3,P%)
  12004. 4      $
  12005. text(csvW%,27)=C$:
  12006. redraw_icon(csvW%,27)
  12007. /      
  12008.  "Quotes":
  12009. set_icon(csvW%,0,C$="ON")
  12010. /      
  12011.  "Header":
  12012. set_icon(csvW%,1,C$="ON")
  12013. /      
  12014.  "Blanks":
  12015. set_icon(csvW%,2,C$="ON")
  12016. ,      
  12017.  "Key":
  12018. set_icon(csvW%,3,C$="ON")
  12019. /      
  12020.  "RecNo":
  12021. set_icon(csvW%,22,C$="ON")
  12022. D      
  12023.  "Data":
  12024. set_icon(csvW%,4,(C$="ON" 
  12025. selected(csvW%,1)))
  12026. " 1      
  12027.  "Display":
  12028. set_icon(csvW%,11,C$="ON")
  12029. "!/      
  12030.  "Strip":
  12031. set_icon(csvW%,16,C$="ON")
  12032. ""0      
  12033.  "NewSeq":
  12034. set_icon(csvW%,23,C$="ON")
  12035. "#        
  12036. shade(csvW%,4,(
  12037. selected(csvW%,1)))
  12038. close_file(F)
  12039. save_csv_options(f$)
  12040.  F,C$
  12041. selected(csvW%,0) 
  12042.  C$="ON" 
  12043.  C$="OFF"
  12044. #F,"Quotes "+C$
  12045. selected(csvW%,1) 
  12046.  C$="ON" 
  12047.  C$="OFF"
  12048. #F,"Header "+C$
  12049. selected(csvW%,2) 
  12050.  C$="ON" 
  12051.  C$="OFF"
  12052. #F,"Blanks "+C$
  12053. selected(csvW%,3) 
  12054.  C$="ON" 
  12055.  C$="OFF"
  12056. #F,"Key "+C$
  12057. selected(csvW%,22) 
  12058.  C$="ON" 
  12059.  C$="OFF"
  12060. #F,"RecNo "+C$
  12061. selected(csvW%,4) 
  12062.  C$="ON" 
  12063.  C$="OFF"
  12064. #F,"Data "+C$
  12065.  sep$ 
  12066.  ",":C$="Comma"
  12067. (9):C$="TAB"
  12068. (10):C$="LF"
  12069. (13):C$="CR"
  12070. :C$=sep$
  12071. #F,"Separator "+C$
  12072.  term$ 
  12073. (13):C$="CR"
  12074. (10):C$="LF"
  12075. (13)+
  12076. (10):C$="CR LF"
  12077. (10)+
  12078. (13):C$="LF CR"
  12079. (13)+
  12080. (13):C$="CR CR"
  12081. (10)+
  12082. (10):C$="LF LF"
  12083. :C$=term$
  12084. #F,"Terminator "+C$
  12085.  scrollterm$ 
  12086.  ";":C$="Semicolon"
  12087.  ",":C$="Space"
  12088. (9):C$="TAB"
  12089. :C$=scrollterm$
  12090. #F,"ScrollTerm "+C$
  12091. selected(csvW%,11) 
  12092.  C$="ON" 
  12093.  C$="OFF"
  12094. #F,"Display "+C$
  12095. selected(csvW%,16) 
  12096.  C$="ON" 
  12097.  C$="OFF"
  12098. #F,"Strip "+C$
  12099. selected(csvW%,23) 
  12100.  C$="ON" 
  12101.  C$="OFF"
  12102. #F,"NewSeq "+C$
  12103. close_file(F)
  12104.  "OS_File",18,f$,&fff
  12105. load_indices
  12106.  f$,menu$,R4%,ptr%
  12107. "^*f$=$database%+".Indices":R4%=0:Keys%=0
  12108. menu$="Indices,"
  12109.  R4%<>-1
  12110.   Keys%+=1
  12111. "b4  
  12112.  "OS_GBPB",9,f$,block%,1,R4%,255 
  12113.  ,,K$,,R4%
  12114.  R4%<>-1 
  12115.     hidden%=
  12116. "e&    
  12117. load_index(f$+"."+K$,Keys%,
  12118. "f2    
  12119.  hide%?KF%(Keys%,0)<>1 
  12120. colour(Keys%,2)
  12121. "i Keys%-=1:
  12122. colour(0,1):key%=0
  12123.  extrakeys$<>"" 
  12124. softerror(
  12125. (MaxKeys%)+",subsidiary indices,"+
  12126. extrakeys$)+",Keys",96)
  12127. make_index_menu
  12128. load_index(f$,key%,merge%)
  12129.  keybase%,I%,name$
  12130. leaf(f$),3)="Del" 
  12131.  Keys%-=1:
  12132.  key%>MaxKeys% 
  12133.  merge% 
  12134.  extrakeys$+=
  12135. leaf(f$)+",":Keys%-=1:
  12136.  "OS_File",5,f$ 
  12137.  ,,,,len%
  12138. name$=
  12139. leaf(f$)
  12140. "tFSHkeyptr%(key%)=
  12141. extend_named_sliding_block(keyanchor%(key%),len%)
  12142. keybase%=SHkeyptr%(key%)
  12143.  "OS_File",255,f$,keybase%
  12144. Index$(key%)=name$
  12145.  key%=0 
  12146.  I%=0 
  12147. "z%    $Date%(I%)=$(keybase%+8+9*I%)
  12148. KL%(key%)=keybase%?70
  12149.  I%=0 
  12150. &  KW%(key%,I%)=!(keybase%+74+I%*4)
  12151. +  KF%(key%,I%)=(KW%(key%,I%)>>24) 
  12152. !case%(key%)=(keybase%?71=255)
  12153. %incspace%(key%)=(keybase%?72=255)
  12154. !null%(key%)=(keybase%?73=255)
  12155.  keybase%!62>0 
  12156.  ### Old key structure applies ###
  12157.   words%=
  12158.  I%=0 
  12159.  KW%(key%,I%)>0 
  12160. "      KF%(key%,I%)=keybase%!62
  12161. K      KW%(key%,I%)=!(keybase%+74+I%*4)+((I%+1)<<16)+((keybase%!62)<<24)
  12162.       words%=
  12163.         
  12164.  words% 
  12165.  KF%(key%,0)=keybase%!62:KW%(key%,0)=KL%(key%)+((keybase%!62)<<24)
  12166.  keybase%!66>0 
  12167.  I%=1 
  12168.       
  12169.  KW%(key%,I%)>0 
  12170. $        KF%(key%,I%)=keybase%!66
  12171. I        KW%(key%,I%)=!(keybase%+74+I%*4)+(I%<<16)+((keybase%!66)<<24)
  12172.       
  12173. load_user_functions(f$)
  12174.  func$,d%,R4%
  12175.  "OS_File",5,f$+".UserFuncs" 
  12176.  f$+".UserFuncs"
  12177.  "OS_File",8,f$+".xyzzy"
  12178.  "OS_CLI","Rename "+f$+".UserFuncs "+f$+".xyzzy.UserFuncs"
  12179.  "OS_CLI","Rename "+f$+".xyzzy "+f$+".UserFuncs"
  12180.   f$+=".UserFuncs"
  12181. 9    
  12182.  "OS_GBPB",9,f$,block%,1,R4%,255 
  12183.  ,,func$,,R4%
  12184. #    
  12185.  R4%<>-1 
  12186.  f$+"."+func$
  12187.  R4%=-1  
  12188. get_tables
  12189.  F,F%,d%,R4%,f$,file$,name$,subst%,field%,exact%,scrcol%,type%,err%
  12190. %f$=$database%+".ValTables.":R4%=0
  12191. lit(validateM%,0,
  12192. ($database%+".Link")
  12193.  F>0 
  12194.   !block%=mainW%
  12195.     F%+=1
  12196. #F,link$(F%)
  12197.     name$=link$(F%)
  12198. name$,1)="@" 
  12199.       
  12200.  chartype%(F%) 
  12201. 9        
  12202.  35:$
  12203. val(mainW%,field%(F%))="R5;Sdirectory"
  12204.         
  12205.         file$=
  12206. name$,2)
  12207. 0        file$=
  12208. filename(file$,"PrintRes",-1)
  12209. 2        
  12210.  "XOS_File",5,file$ 
  12211.  d%,,type%;err%
  12212.         
  12213.  (err% 
  12214.  1)=1 
  12215.           link$(F%)=""
  12216. A          
  12217. softerror(file$+","+
  12218. leaf(file$)+","+Tag$(F%),121)
  12219.           
  12220.           
  12221.  d%=1 
  12222. '            type%=(type%>>8) 
  12223.  &fff
  12224. >            $
  12225. val(mainW%,field%(F%))="R5;Sfile_"+
  12226. ~(type%)
  12227.           
  12228.         
  12229.       
  12230.       
  12231. /      field%=
  12232. trailing_number(name$,exact%)
  12233.       
  12234.  name$<>"" 
  12235. 1        subst%=
  12236. leading_number(scrcol%,name$)
  12237. (        
  12238.  "OS_File",5,f$+name$ 
  12239.         
  12240.  d%=1 
  12241. %          
  12242. load_table(f$+name$,
  12243.           
  12244.  scrcol%>0 
  12245. 5            
  12246. colour_scroller(F%,scrcol%,fcol%(8))
  12247. <            
  12248. set_icon_cols(mainW%,field%(F%),fcol%(8))
  12249.           
  12250. $          
  12251. softerror(name$,31)
  12252.         
  12253.       
  12254.         
  12255.   link$(0)="LOADED"
  12256. close_file(F)
  12257.  ### Force loading of unlinked but flagged tables ###
  12258.  ### The use of "!" to flag tables sometimes gives an error. Use "+" ###
  12259.  R4%<>-1
  12260.  "OS_GBPB",9,
  12261. f$),block%,1,R4%,255 
  12262.  ,,name$,,R4%
  12263.  R4%<>-1 
  12264. name$) 
  12265. +      
  12266.  "+","!":
  12267. load_table(f$+name$,
  12268.         
  12269.  T%=LastTable%+1 
  12270.  MaxTabs%
  12271. A  SHtabptr%(T%)=
  12272. extend_named_sliding_block(tabanchor%(T%),4)
  12273.  extratabs$<>"" 
  12274. softerror(
  12275. (MaxTabs%)+",tables,"+
  12276. extratabs$)+",Tabs",96)
  12277. make_table_menu(TabsLoaded$)
  12278. load_calcs
  12279.  F,I%,F%,F1%,P%,calc$,file%,top
  12280. update$()=""
  12281. ($database%+".Calc")
  12282.  F>0 
  12283. +    F%+=1:F$=
  12284. ~(F%):
  12285.  F%<16 
  12286.  F$="0"+F$
  12287. !    
  12288. #F,calc$:calc$(F%)=calc$
  12289.  chartype%(F%) 
  12290.       
  12291.  6,7:
  12292.       
  12293. !        P%=
  12294. calc$,"$Rf%(",P%)
  12295. ?        
  12296.  P%>0 
  12297.  F1%=
  12298. calc$,P%+5)):update$(F1%)+=F$:P%+=5
  12299.       
  12300.  P%=0
  12301.       
  12302.          P%=
  12303. calc$,"FNn(",P%)
  12304. ?        
  12305.  P%>0 
  12306.  F1%=
  12307. calc$,P%+4)):update$(F1%)+=F$:P%+=4
  12308.       
  12309.  P%=0
  12310. .      
  12311. calc$,"TIME$")>0 
  12312.  update$(0)+=F$
  12313.         
  12314.   calc$(0)="LOADED"
  12315. close_file(F)
  12316. selected(prefsW%,14) 
  12317. ,  dbasehandle%=
  12318. ($database%+".Database")
  12319.  "Hourglass_On"
  12320.  file%=0 
  12321.     top=8*file%+LH%
  12322. !    P%=
  12323. neighbour(key%,top,1)
  12324. P    
  12325.  update$(0)<>"" 
  12326.  updatethese%=
  12327. scan_file("P%<>top",key%,file%,6,1)
  12328.  file%
  12329.  "Hourglass_Off"
  12330. close_file(dbasehandle%)
  12331.  I%=1 
  12332.  fields%
  12333.  chartype%(I%) 
  12334. $      
  12335.  21,27,28,32,34,40,45,59:
  12336. O      
  12337.  $Rf%(I%) holds key legend or other important data. Don't overwrite!
  12338.       
  12339. :$Rf%(I%)=field$(I%)
  12340. redraw(mainW%)
  12341. field_data
  12342. print_init("W")
  12343.  I%,V%,tab%,S$,M$,M%,P%
  12344. DTextName$=$database%+".PrintJobs.FieldData":$SaveName%=TextName$
  12345. 7format$="fields":LenLine%=Lmargin%+93:tab%=Lmargin%
  12346. spacer$,"|")>0 
  12347.  spacer$="|"
  12348. Tab%()=0,1,7,23,43,47,52,57
  12349. #!8maxhead%=0:fspace%=18:hspace%=3*36-18:PrintFields%=6
  12350. end_line
  12351. send_title("Description of fields")
  12352. send_title("Field Class           Type                Len Tag  Descriptor")
  12353. M$="ECTXKOSL"
  12354.  "Hourglass_On"
  12355.  I%=1 
  12356.  fields%
  12357. #*9  S$=
  12358. "   "+
  12359. (I%),4):
  12360. store_string(S$,tab%,
  12361. ):tab%+=6
  12362. #+?  V%=chartype%(I%):M%=
  12363. M$,vtype$(V%))-1:P%=
  12364. fmenu$(M%),",")
  12365. #,6  
  12366. store_string(
  12367. fmenu$(M%),P%-1),tab%,
  12368. ):tab%+=16
  12369. #-%  S$=
  12370. (V%),2)+" "+vname$(V%)
  12371. #.'  
  12372. store_string(S$,tab%,
  12373. ):tab%+=20
  12374. #/>  S$=
  12375. "  "+
  12376. (len%(I%)),3):
  12377. store_string(S$,tab%,
  12378. ):tab%+=4
  12379. #0,  
  12380. store_string(Tag$(I%),tab%,
  12381. ):tab%+=5
  12382. #14  
  12383. store_string($
  12384. text(mainW%,desc%(I%)),tab%,
  12385.   tab%=Lmargin%
  12386.  "Hourglass_Off"
  12387. nosort%=
  12388. screen_list
  12389. write_log(-1,"Field data printed","")
  12390. get_form(
  12391.  Fptr%)
  12392.  F,L%,N%,I%,V%,x%,y%,xlim%,ylim%,text%,width%,nwidth%,resave%,num%,Ex%
  12393.  design% 
  12394.  dval%=hand% 
  12395.  dval%=-1
  12396. ($database%+".Form")
  12397.  F>0 
  12398. #@B  SHformptr%=
  12399. extend_named_sliding_block(formanchor%,SHclaim%)
  12400. #F,N%
  12401. #BB  
  12402.  N%>127 
  12403. close_file(F):
  12404.  fatal_err%,
  12405. msg("Err207,"+
  12406. (N%))
  12407. #Cd  
  12408.  N%>MaxFields% 
  12409. close_file(F):
  12410.  fatal_err%,
  12411. msg("Err98,"+
  12412. (N%)+","+
  12413. (MaxFields%)+",Fields")
  12414. #D7  Fptr%=SHformptr%:Rf%(0)=Fptr%:$Rf%(0)="":Fptr%+=1
  12415.   Length%=0
  12416.  I%=1 
  12417. #G@    
  12418. #F,Desc$,Tag$(I%),xd%,yd%,xf%,yf%,len%,char%,fix%,bbox%
  12419. #H3    
  12420.  (char% 
  12421.  128)>0 
  12422.  hide%?I%=1 
  12423.  hide%?I%=0
  12424. #I=    
  12425.  (char% 
  12426.  256)>0 
  12427.  mandatory%?I%=1 
  12428.  mandatory%?I%=0
  12429. #JA    
  12430.  (char% 
  12431.  512)>0 
  12432.  displayit%?I%=1 
  12433.  displayit%?I%=0    
  12434. #K.    
  12435.  char%>67 
  12436.  char%<79 
  12437.  updatethese%=
  12438.     char%=char% 
  12439. #M0    
  12440.  len%=0 
  12441.  dbtype$="new" 
  12442.  zerolen%?I%=1
  12443. #OB      
  12444.  hide%?I%=1:dflg%=(winback%<<28)+(winback%<<24)+&01A711
  12445. #P2      
  12446.  Desc$="":dflg%=(winback%<<28)+&701A711
  12447. #Q)      
  12448. :dflg%=(winback%<<28)+&701A731
  12449. #R        
  12450. #S.    width%=bbox% 
  12451.  &FFFF:height%=bbox%>>16
  12452.  len%>0 
  12453. #U,      
  12454.  height%=0 
  12455.  height%=48:resave%=
  12456. #V2      
  12457.  width%=0 
  12458.  width%=len%*16+16:resave%=
  12459.     $boxW%=
  12460. (width%)
  12461. #YG    
  12462.  ### Following IF...THEN corrects for desktop font changes ###
  12463. #Z,    
  12464.  FontAdjust% 
  12465.  vtype$(char%)<>"L" 
  12466. #[1      nwidth%=
  12467. guess_width(len%,char%,width%)
  12468. #\:      
  12469.  len%>0 
  12470. (nwidth%-width%)<80 
  12471.  width%=nwidth%
  12472. #]        
  12473. #^>    
  12474.  design% 
  12475.  fval%=hvalid%(char%) 
  12476.  fval%=valid%(char%)
  12477. #_"    x%=xf%+width%+32:y%=yf%-16
  12478.  x%>xlim% 
  12479.  xlim%=x%
  12480.  y%<ylim% 
  12481.  ylim%=y%
  12482. #b'    y%=yd%-16:
  12483.  y%<ylim% 
  12484.  ylim%=y%
  12485. #c)    
  12486.  zerolen%?I%=0 
  12487.  Length%+=len%+1
  12488. #dF    
  12489.  design%=
  12490.  char%=39 
  12491.  len%=(height% 
  12492.  40)*((width% 
  12493.  16)-4)
  12494. #e7    len%(I%)=len%:chartype%(I%)=char%:fix%(I%)=fix%
  12495.     L%=
  12496. (Desc$)
  12497. #gF    SHformptr%=
  12498. claim_page(formanchor%,Fptr%-SHformptr%+L%+len%+2)
  12499.     $Fptr%=Desc$
  12500. #i$    dwidth%=
  12501. string_width(Desc$)
  12502. #jK    
  12503.  yd%>=yf% 
  12504.  yd%+44<=yf%+height% 
  12505.  xd%<xf% 
  12506.  xd%=xf%-dwidth%       
  12507. #kU    desc%(I%)=
  12508. create_icon(0,mainW%,xd%,yd%,dwidth%,44,dflg%,"",Fptr%,dval%,L%+1)
  12509. #l-    Fptr%+=L%+1:Rf%(I%)=Fptr%:$Rf%(I%)=""
  12510. #m0    
  12511.  char%=35 
  12512.  char%=44 
  12513.  len%=NameLength%
  12514.  char% 
  12515. #o@      
  12516.  59:fval%=SHlogoptr%:$Fptr%=Tag$(I%):len%=
  12517. (Tag$(I%))
  12518. #pj      
  12519.  9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31:buttonfield%(0,char%-9)=I%
  12520. #q!      
  12521. check_menu_button
  12522.       
  12523.  35,44,60,61,62:
  12524. #s       V%=valid%(char%):L%=30
  12525. #tC      SHformptr%=
  12526. claim_page(formanchor%,Fptr%-SHformptr%+L%+2)
  12527. #uF      fval%=Fptr%:$fval%=$V%:Fptr%+=L%+1:Rf%(I%)=Fptr%:$Rf%(I%)=""
  12528. #v5      
  12529.  char%=60 
  12530.  Fptr%+=len%+1:$Fptr%="":len%=0
  12531. #w        
  12532. #xM    field%(I%)=
  12533. icon_design(I%,char%,xf%,yf%,width%,height%,fval%,len%,
  12534.  char% 
  12535. #z.      
  12536.  3,6,46,47,54,56,57,74,75,77,78,79:
  12537. #{1      
  12538. icon_bit(9,mainW%,field%(I%),
  12539. ):num%=
  12540. #|(      
  12541.  Right-justify numeric fields
  12542. #}3      
  12543.  64,65,66,67:
  12544. rename_directory(I%,char%)
  12545. #~L      
  12546. make_scroller(Scrollnum%,I%,xf%,yf%,width%,height%,len%,char%-63)
  12547. 6      
  12548.  36,37,38,39,40:
  12549. rename_directory(I%,char%)
  12550.         
  12551. close_file(F)
  12552.   numericfields%=0
  12553. set_up_select(N%,numericfields%)
  12554.  N%=0
  12555. 7!block%=0:block%!4=ylim%:block%!8=xlim%:block%!12=0
  12556.  "Wimp_SetExtent",mainW%,block%
  12557. JTag$(0)="RECORD":Tag$(MaxFields%+1)="KEY":Tag$(MaxFields%+2)="SUBFILE"
  12558.  resave% 
  12559.  fields%=N%:
  12560. save_form($database%+".Form")
  12561.  Scrollnum%>MaxLists% 
  12562.  Scrollnum%=MaxLists%:
  12563.  fatal_err%,
  12564. msg("Err32,"+
  12565. (Scrollnum%)+",scrollable lists,"+
  12566. (MaxLists%)+",Scrolls")
  12567.  Ex%>0 
  12568. save_renamed(Ex%)
  12569. check_menu_button
  12570. (Tag$(I%))
  12571.  Tag$(I%)="":Tag$(I%)=Tag$(I%-1):resave%=
  12572.  F%>0:Tag$(I%)=Tag$(F%):resave%=
  12573.  Assume button already has same tag as menufield
  12574. save_renamed(N%)
  12575.  "OS_CLI","Copy <Pbase$Dir>.Resources.RevertInfo "+$database%+".!Help ~C~V"
  12576. "rename%=
  12577. ($database%+".!Help")
  12578. #rename%=
  12579. #rename%
  12580. #revert%=
  12581. ($database%+".Revert")
  12582. #revert%,"Set Dbase$Dir <Obey$Dir>"
  12583.  I%=0 
  12584.  N%-1
  12585. #rename%,Label$(I%,0)
  12586. #revert%,Label$(I%,1)
  12587. #revert%,"Remove <Dbase$Dir>.!Help"
  12588. #revert%,"Remove <Dbase$Dir>.Revert"
  12589. close_file(rename%)
  12590. close_file(revert%)
  12591.  "OS_File",18,$database%+".Revert",&feb
  12592. Label$()=""
  12593. softerror(
  12594. leaf($database%)+".!Help",215)
  12595. rename_directory(F%,type%)
  12596.  type% 
  12597.  36,39:old$="Memo"+
  12598. (F%):new$=Tag$(F%)+"text"
  12599.  37,40:old$="Sprite"+
  12600. (F%):new$=Tag$(F%)+"sprite"
  12601.  38:old$="Draw"+
  12602. (F%):new$=Tag$(F%)+"draw"
  12603.  64,65,66,67:old$="Scroll"+
  12604. (F%):new$=Tag$(F%)+"scroll"
  12605.  "OS_File",5,$database%+"."+new$ 
  12606.  d%=2 
  12607.  "OS_File",5,$database%+"."+old$ 
  12608.  d%=2 
  12609.  "OS_CLI","Rename "+$database%+"."+old$+" "+$database%+"."+new$
  12610. -  Label$(Ex%,0)=old$+" renamed as: "+new$
  12611. C  Label$(Ex%,1)="Rename <Dbase$Dir>."+new$+" <Dbase$Dir>."+old$
  12612.   Ex%+=1
  12613.  ### Routines to handle scrollable-list fields (types 64,65,66,67) ###
  12614.  ### Databases using such fields are incompatible with earlier versions ###
  12615. make_scroller(
  12616.  N%,F%,x%,y%,w%,h%,L%,cols%)
  12617.  N%>=MaxLists% 
  12618.  N%+=1:
  12619.  handle%,rows%,I%,J%,R%,colwidth%,F,max%,pos%
  12620.  "Wimp_OpenTemplate",,"<Pbase$Dir>.Resources.Templates"
  12621. #handle%=
  12622. new_window("scroll",0)
  12623.  "Wimp_CloseTemplate"
  12624. LSHscrollptr%(N%)=
  12625. extend_named_sliding_block(scrollanchor%(N%),SHclaim%)
  12626. 'f$=$database%+"."+Tag$(F%)+"scroll"
  12627.  "OS_File",8,f$
  12628. scrollerW%(N%)=handle%
  12629. scrolldata%(N%,0)=F%
  12630. scrolldata%(N%,1)=x%
  12631. scrolldata%(N%,2)=y%
  12632. scrolldata%(N%,3)=w%
  12633. scrolldata%(N%,4)=h%
  12634. rows%=(h% 
  12635. Cscrolldata%(N%,5)=rows%*cols%:
  12636.  No.of icons in window initially
  12637. Hscrolldata%(N%,6)=scrolldata%(N%,5):
  12638.  No.of icons for current record
  12639. (f$+".Max")
  12640.  F>0 
  12641.  scrolldata%(N%,7)=
  12642.  scrolldata%(N%,7)=scrolldata%(N%,5):
  12643.  Max.No.of icons for database
  12644. close_file(F)
  12645. scrolldata%(N%,8)=cols%
  12646.  scrolldata%(N%,9) holds Tab number for printing
  12647. ptr%=SHscrollptr%(N%)
  12648. (f$+".Format")
  12649.  I%=0 
  12650.  cols%-1
  12651.  F>0 
  12652.  sclen%(N%,I%)=
  12653.  sclen%(N%,I%)=10
  12654.   max%+=sclen%(N%,I%)+1
  12655. close_file(F)
  12656.  I%=1 
  12657.  rows%
  12658.   pos%=0
  12659.  J%=0 
  12660.  cols%-1
  12661.     L%=sclen%(N%,J%)
  12662. )    colwidth%=((w%-44)*(L%+1)) 
  12663.  max%
  12664. (    flags%=&0000A535+(fcol%(10)<<24)
  12665. g    R%=
  12666. create_icon(0,handle%,pos%,-I%*44-2,colwidth%,46,flags%,"",ptr%,valid%(chartype%(F%)),L%+1)
  12667.     pos%+=colwidth%
  12668.     $
  12669. text(handle%,R%)=""
  12670.     ptr%+=L%+1
  12671. (f$+".Blank")
  12672.  I%=0 
  12673.  scrolldata%(N%,5)-1
  12674. #F,""
  12675. close_file(F)
  12676.  $Reformatted%<>"" 
  12677.  "OS_CLI","Copy "+$Original%+"."+Tag$(F%)+"scroll.Format "+f$+".Format ~V~CF"
  12678. 7!block%=0:block%!4=-h%+2:block%!8=w%-44:block%!12=0
  12679.  "Wimp_SetExtent",handle%,block%
  12680.     N%+=1
  12681. colour_scroller(field%,column%,colour%)
  12682.  S%,ic%,wi%,icons%,cols%
  12683.  column%=0 
  12684. 7colour%=(colour% 
  12685.  %1111) 
  12686.  (fcol%(10) 
  12687.  %11110000)
  12688. scroller_number(field%):wi%=scrollerW%(S%)
  12689. icons%=scrolldata%(S%,6)
  12690. cols%=scrolldata%(S%,8)
  12691.  ic%=0 
  12692.  icons%-1
  12693.  ic% 
  12694.  cols%=column%-1 
  12695. '    
  12696. set_icon_cols(wi%,ic%,colour%)
  12697. +    
  12698. set_icon_cols(wi%,ic%,fcol%(10))
  12699. add_row(S%,wi%,from%,cols%)
  12700.  F%,I%,L%,N%,R%,colwidth%,pos%,w%,max%,valcol%,ptr%,flags%,table$
  12701. $flags%=&0000A535+(fcol%(10)<<24)
  12702. F%=scrolldata%(S%,0)
  12703. table$=link$(F%)
  12704. $    &I%=
  12705. leading_number(valcol%,table$)
  12706. &!block%=mainW%:block%!4=field%(F%)
  12707.  "Wimp_GetIconState",,block%
  12708. w%=block%!16-block%!8
  12709.  I%=0 
  12710.  cols%-1
  12711.   max%+=sclen%(S%,I%)+1
  12712. ptr%=(from%-1)*max%
  12713. =SHscrollptr%(S%)=
  12714. claim_page(scrollanchor%(S%),ptr%+max%)
  12715.  I%=0 
  12716.  cols%-1
  12717.   L%=sclen%(S%,I%)+1
  12718. #  colwidth%=((w%-44)*L%) 
  12719.  max%
  12720. s  R%=
  12721. create_icon(0,wi%,pos%,-from%*44-2,colwidth%,46,flags%,"",SHscrollptr%(S%)+ptr%,valid%(chartype%(F%)),L%)
  12722.   pos%+=colwidth%
  12723.  I%=valcol%-1 
  12724. set_icon_cols(wi%,R%,fcol%(8))
  12725. text(wi%,R%)=""
  12726.   ptr%+=L%
  12727. selected(wi%,R%-cols%) 
  12728. select(wi%,R%)
  12729. scrolldata%(S%,6)+=cols%
  12730.  scrolldata%(S%,6)>scrolldata%(S%,7) 
  12731.  scrolldata%(S%,7)=scrolldata%(S%,6)
  12732. =!block%=0:block%!4=-from%*44-2:block%!8=w%-44:block%!12=0
  12733.  "Wimp_SetExtent",wi%,block%
  12734. =scrolldata%(S%,6)
  12735. delete_row(S%,wi%,cols%,F%)
  12736.  ic%,icons%,flag%,w%,rows%
  12737. icons%=scrolldata%(S%,6)
  12738.  icons%=scrolldata%(S%,5) 
  12739. =icons%
  12740.  ic%=icons%-cols% 
  12741.  icons%-1
  12742. $'%  
  12743. text(wi%,ic%)<>"" 
  12744.  flag%=
  12745.  flag% 
  12746.   icons%-=cols%
  12747. delete_icons(wi%,icons%)
  12748.   scrolldata%(S%,6)=icons%
  12749.   rows%=icons% 
  12750.  cols%
  12751. $.(  !block%=mainW%:block%!4=field%(F%)
  12752. $/$  
  12753.  "Wimp_GetIconState",,block%
  12754.   w%=block%!16-block%!8
  12755. $1?  !block%=0:block%!4=-rows%*44-2:block%!8=w%-44:block%!12=0
  12756. $2$  
  12757.  "Wimp_SetExtent",wi%,block%
  12758. $3   
  12759. set_caret(0,wi%,icons%-1)
  12760. scroll_it(wi%,rows%-1,
  12761. redraw(wi%)
  12762. =icons%
  12763. scroller_click(swi%,sic%,b%,S%)
  12764. validate(Fieldnumber%,T%,N$)=
  12765. b%=(b% 
  12766.  2047)
  12767. $=,wi%=mainW%:ic%=field%(scrolldata%(S%,0))
  12768. identify_field(ic%)
  12769. $?(Scrcol%=(sic% 
  12770.  scrolldata%(S%,8))+1
  12771.   first%=
  12772. find_caret
  12773. $C*  
  12774. select_range(first%,Fieldnumber%,
  12775. $E(  
  12776. selected(passW%,11) 
  12777.  Modify% 
  12778. set_up_field_menu
  12779. $G#    
  12780. show_menu(mainM%,x%-64,y%)
  12781. relations
  12782. $J:  
  12783.  64:dragfield%=Fieldnumber%:
  12784. init_drag(swi%,sic%,5)
  12785. $KE  
  12786.  256:
  12787. invert(wi%,ic%):
  12788. update_selection(
  12789. selected(wi%,ic%),"")
  12790. $L"  
  12791.  I%=0 
  12792.  scrolldata%(S%,6)-1
  12793. $M-    
  12794. set_icon(swi%,I%,
  12795. selected(wi%,ic%))
  12796.  1024:
  12797. (-2) 
  12798. $Q5    
  12799. enter_tag(Tag$(Fieldnumber%)+"#"+
  12800. (Scrcol%))
  12801. $R        
  12802. $S5    !block%=swi%:
  12803.  "Wimp_GetWindowState",,block%
  12804. $TW    
  12805.  Access% 
  12806.  "Wimp_SetCaretPosition",swi%,sic%,x%-block%!4+block%!20,y%,-1,-1
  12807. $U,    
  12808. selected(prefsW%,19) 
  12809. relations
  12810. scroller_press(wi%,
  12811.  ic%,S%,pressed%)
  12812.  L%,cols%,P%,icons%,row%,col%,ok%
  12813. abort_scroller:
  12814. ok%=-1
  12815. $_"Fieldnumber%=scrolldata%(S%,0)
  12816. icons%=scrolldata%(S%,6)
  12817. cols%=scrolldata%(S%,8)
  12818. row%=(icons% 
  12819.  cols%)+1
  12820. col%=ic% 
  12821.  cols%
  12822. L%=len%(Fieldnumber%)
  12823. cfield$(Fieldnumber%)="#"
  12824.  pressed% 
  12825. $g<  
  12826.  13,398,399,414,415:ok%=
  12827. validate(Fieldnumber%,T%,N$)
  12828.  ok%=0 
  12829.  pressed% 
  12830. $k$  
  12831. select_range(1,fields%,
  12832.  sclen%(S%,col%)>=10 
  12833. $n(    $
  12834. text(wi%,ic%)=
  12835. convert_date(4)
  12836. $oA    
  12837.  sclen%(S%,col%)>=8 
  12838. text(wi%,ic%)=
  12839. convert_date(2)
  12840. redraw_icon(wi%,ic%) 
  12841.  sclen%(S%,col%)>=8 
  12842.     T$=
  12843. $u-    
  12844. T$,3,1)=$timesep%:
  12845. T$,6,1)=$timesep%
  12846.     $
  12847. text(wi%,ic%)=T$
  12848. redraw_icon(wi%,ic%)
  12849. $x      
  12850.  21:ScrollChanged%=
  12851. $z6  
  12852. clear_selection:
  12853. restore_caret(starthere%)
  12854. $|*  changed%=
  12855. update_calcs(Fieldnumber%)
  12856.  ic% 
  12857.  icons%-1:
  12858. (-1) 
  12859. 3      icons%=
  12860. add_row(S%,wi%,row%,cols%):ic%+=1
  12861. 0      
  12862. set_caret(0,wi%,ic%):row%=ic% 
  12863.  cols%
  12864.        
  12865. scroll_it(wi%,row%,
  12866.       
  12867. (      
  12868.  Fieldnumber%=Lastwritable% 
  12869. #        
  12870. close_window(relateW%)
  12871.         ScrollChanged%=
  12872. /        
  12873. check_record 
  12874. display(key%,-1)
  12875. 9        
  12876.  Fieldnumber%=
  12877. next_editable(Fieldnumber%,1)
  12878.       
  12879.         
  12880.     ic%+=1
  12881. .    
  12882. set_caret(0,wi%,ic%):row%=ic% 
  12883.  cols%
  12884. scroll_it(wi%,row%,
  12885. selected(prefsW%,19) 
  12886. relations
  12887.  398,414:
  12888. *  changed%=
  12889. update_calcs(Fieldnumber%)
  12890.  ic%=icons%-1 
  12891. 3    Fieldnumber%=
  12892. next_editable(Fieldnumber%,1)
  12893. .    
  12894.  pressed%=398 
  12895.  ic%+=cols% 
  12896.  ic%+=1
  12897. !    
  12898.  ic%>icons%-1 
  12899.  ic%=col%
  12900. .    
  12901. set_caret(0,wi%,ic%):row%=ic% 
  12902.  cols%
  12903. scroll_it(wi%,row%,
  12904. selected(prefsW%,19) 
  12905. relations
  12906.  399,415:
  12907. *  changed%=
  12908. update_calcs(Fieldnumber%)
  12909.  ic%=0 
  12910. 4    Fieldnumber%=
  12911. next_editable(Fieldnumber%,-1)
  12912. .    
  12913.  pressed%=399 
  12914.  ic%-=cols% 
  12915.  ic%-=1
  12916. '    
  12917.  ic%<0 
  12918.  ic%=icons%-cols%+col%
  12919. .    
  12920. set_caret(0,wi%,ic%):row%=ic% 
  12921.  cols%
  12922. scroll_it(wi%,row%,
  12923. selected(prefsW%,19) 
  12924. relations
  12925.  461:icons%=
  12926. add_row(S%,wi%,row%,cols%):
  12927.  Insert at end (Ins)
  12928.  477:
  12929.  Delete last row if blank (
  12930. D  icons%=
  12931. delete_row(S%,wi%,cols%,Fieldnumber%):ScrollChanged%=
  12932.  493:
  12933.  Insert blank after row with caret (^Ins)
  12934.  ic% 
  12935.  cols%>0
  12936.     ic%-=1
  12937. (  icons%=
  12938. add_row(S%,wi%,row%,cols%)
  12939.  I%=icons%-1 
  12940.  ic%+cols% 
  12941. +    $
  12942. text(wi%,I%)=$
  12943. text(wi%,I%-cols%)
  12944.  I%=ic% 
  12945.  ic%+cols%-1
  12946.     $
  12947. text(wi%,I%)=""
  12948. redraw(wi%)
  12949.   ScrollChanged%=
  12950.  509:
  12951.  Delete row with caret, incl. data (^
  12952.  ic% 
  12953.  cols%>0
  12954.     ic%-=1
  12955.  I%=ic% 
  12956.  icons%-cols%-1
  12957. +    $
  12958. text(wi%,I%)=$
  12959. text(wi%,I%+cols%)
  12960.  I%=icons%-cols% 
  12961.  icons%-1
  12962.     $
  12963. text(wi%,I%)=""
  12964. 3  icons%=
  12965. delete_row(S%,wi%,cols%,Fieldnumber%)
  12966. set_caret(0,wi%,ic%)
  12967. redraw(wi%)
  12968.   ScrollChanged%=
  12969.  pressed%>31 
  12970.  pressed%<384 
  12971.     ScrollChanged%=
  12972. 2    
  12973. main_press(mainW%,field%(Fieldnumber%))
  12974. scroll_it(wi%,row%,end%)
  12975.  scrollrow%,lastrow%
  12976. 0!block%=wi%:
  12977.  "Wimp_GetWindowState",,block%
  12978.  scrollrow%=-(block%!24 
  12979. 3lastrow%=((block%!16-block%!8) 
  12980.  44)+scrollrow%
  12981.  row%=lastrow%:block%!24-=44:
  12982.  "Wimp_OpenWindow",,block%
  12983.  row%<scrollrow% 
  12984.  end%=
  12985. 5  block%!24=-row%*44:
  12986.  "Wimp_OpenWindow",,block%
  12987. get_scroller(R%,F%,cols%)
  12988.  b$,S%,L%
  12989. $Rf%(F%)=
  12990. scroller_number(F%)
  12991. blob_path(
  12992. ,$database%,R%,F%,64,b$)
  12993.  L%<0 
  12994.  "OS_CLI","Copy "+$database%+"."+Tag$(F%)+"scroll.Blank "+b$+" ~C~V"
  12995. import_to_scroller(S%,b$)
  12996. import_to_scroller(S%,f$)
  12997.  L%,N%,I%,F,P%,icons%,micons%,fields%,lastrow%,delfrom%,wi%
  12998. abort_scroller:
  12999. wi%=scrollerW%(S%)
  13000. F%=scrolldata%(S%,0)
  13001. Vicons%=scrolldata%(S%,6):
  13002.  Currently available no.of icons. May need more or fewer
  13003. Hmicons%=scrolldata%(S%,5):
  13004.  Minimum no.of icons. Must not have fewer
  13005. cols%=scrolldata%(S%,8)
  13006.  I%=1 
  13007.  cols%
  13008. ;    
  13009. text(wi%,fields%)=
  13010. #F,sclen%(S%,I%-1))
  13011.     fields%+=1
  13012.  fields%=icons% 
  13013. !      lastrow%=icons% 
  13014.  cols%
  13015. 2      icons%=
  13016. add_row(S%,wi%,lastrow%+1,cols%)
  13017.         
  13018. close_file(F)
  13019.  fields%<micons%:delfrom%=micons%:fields%=icons%
  13020.  fields%<icons%:delfrom%=fields%
  13021.  delfrom%>0 
  13022. delete_icons(wi%,delfrom%)
  13023.   icons%=fields%
  13024.   scrolldata%(S%,6)=icons%
  13025.   lastrow%=fields% 
  13026.  cols%
  13027. 2  !block%=wi%:
  13028.  "Wimp_GetWindowState",,block%
  13029. !  block%!8=block%!12-block%!4
  13030. 3  !block%=0:block%!4=-lastrow%*44-2:block%!12=0
  13031.  "Wimp_SetExtent",wi%,block%
  13032. scroll_it(wi%,0,
  13033. redraw(wi%):
  13034. redraw(wi%)
  13035. ScrollChanged%=
  13036. abort_scroller
  13037. close_file(F)
  13038. wimp_error(
  13039. redraw(wi%)
  13040.  Returns max possible space needed
  13041. max_scroller_length(S%,F%,cols%,scrcol%,L%)
  13042.  I%,rows%,max%
  13043. #rows%=scrolldata%(S%,7) 
  13044.  cols%
  13045.  I%=1 
  13046.  rows%
  13047. ?  max%+=
  13048. max_row_length(S%,F%,cols%,scrcol%,L%)+
  13049. (rowterm$)
  13050. =max%-
  13051. (rowterm$)
  13052. max_row_length(S%,F%,cols%,scrcol%,explen%)
  13053.  I%,max%
  13054.  I%=1 
  13055.  cols%
  13056.  I%=scrcol% 
  13057.  L%=explen% 
  13058.  L%=sclen%(S%,I%-1)
  13059.   max%+=L%+
  13060. (cellsep$)
  13061. =max%-
  13062. (cellsep$)
  13063. read_scroller_row(R%,F%,S%,cols%,sh%,s$)
  13064.  L%,LF%,LR%,F$,S$,F,J%,scrcol%
  13065.  "OS_Byte",229,1:
  13066.  "OS_Byte",124
  13067. %$+L%=
  13068. blob_path(
  13069. ,$database%,R%,F%,64,b$)
  13070.  L%>0 
  13071.   scrcol%=scrcol%(S%)
  13072. #F=scroller_ptr%(S%)
  13073.  J%=1 
  13074.  cols%
  13075.  J%=cols% 
  13076.  s$=""
  13077.     F$=
  13078.  F$<>"" 
  13079.       
  13080.  J%=scrcol% 
  13081. %.3        F$=
  13082. expand(F$,link$(F%),L%,SF$,scrcol%)
  13083. %/         
  13084.  L%=sclen%(S%,J%-1)
  13085.       
  13086.       flag%=
  13087. %20      
  13088.  sh% 
  13089.  S$+=F$+s$ 
  13090.  S$+=
  13091. pad(F$,L%)+s$
  13092. %3        
  13093.     scroller_ptr%(S%)=0
  13094.     pending%(S%)=
  13095. %8        
  13096.     scroller_ptr%(S%)=
  13097.     remaining%=
  13098. close_file(F)
  13099.  pending%(S%)=
  13100.  "OS_Byte",229,0
  13101. print_rest_of_scrollers(R%)
  13102.  Prints remaining parts of scrollable lists in Horizontal format
  13103.  S%,F%,T%,cols%,F$,remaining%,flag%,L%
  13104.   remaining%=
  13105. :flag%=
  13106.  S%=0 
  13107.  Scrollnum%-1
  13108.  pending%(S%) 
  13109.       F%=scrolldata%(S%,0)
  13110. %J!      cols%=scrolldata%(S%,8)
  13111.       N%=scrolldata%(S%,9)
  13112. %L:      F$=
  13113. read_scroller_row(R%,F%,S%,cols%,
  13114. ,cellsep$)
  13115. %M&      
  13116. store_string(F$,Tab%(N%),
  13117.       
  13118. adjust_width
  13119. %O        
  13120. %Q,  
  13121.  flag% 
  13122. store_rec_num(R%):
  13123. end_line
  13124.  remaining%=
  13125.  format$<>"table" 
  13126. finish_scroller_printing(R%,F%,S%,cols%,pos%)
  13127.  Prints scrollable list in Vertical format
  13128.  F$,flag%
  13129.   flag%=
  13130. %[6  F$=
  13131. read_scroller_row(R%,F%,S%,cols%,
  13132. ,cellsep$)
  13133.  flag% 
  13134. end_line
  13135. store_rec_num(R%)
  13136. %_     
  13137. store_string(F$,pos%,
  13138. %`      
  13139.  pending%(S%)=
  13140. write_scroller(R%,F%)
  13141.  b$,L%,S%,I%,F,wi%
  13142.  adjust% 
  13143. scroller_number(F%)
  13144. wi%=scrollerW%(S%)
  13145. %i+L%=
  13146. blob_path(
  13147. ,$database%,R%,F%,64,b$)
  13148.  I%=0 
  13149.  scrolldata%(S%,6)-1
  13150. text(wi%,I%)
  13151. close_file(F)
  13152.  "OS_File",18,b$,&fff
  13153. scroller_number(F%)
  13154.  S%<Scrollnum%-1 
  13155.  scrolldata%(S%,0)<>F%
  13156.   S%+=1
  13157. scroller_num2(wi%)
  13158.  S%<Scrollnum%-1 
  13159.  wi%<>scrollerW%(S%)
  13160.   S%+=1
  13161. kill_scrollers(permanent%)
  13162.  F%,S%,F,f$
  13163. S%=Scrollnum%
  13164.  S%>0
  13165.   S%-=1
  13166. scroll_it(scrollerW%(S%),0,
  13167. close_window(scrollerW%(S%))
  13168.  adjust% 
  13169.  $Reformatted%="" 
  13170.     F%=scrolldata%(S%,0)
  13171. /    f$=$database%+"."+Tag$(F%)+"scroll.Max"
  13172.     F=
  13173.      
  13174. (scrolldata%(S%,7))
  13175. close_file(F)
  13176.  "OS_File",18,f$,&fff
  13177.  permanent% 
  13178.  Scrollnum%=0
  13179. inscroll(F%,col%,s$,op$,val%)
  13180.  len%,found%,cell$,case%,F,N%,cols%,S$
  13181. /len%=
  13182. blob_path(
  13183. ,$database%,REC%,F%,64,b$)
  13184. cols%=chartype%(F%)-63
  13185. case%=
  13186. selected(queryW%,1)
  13187.   cell$=
  13188.   N%+=1:
  13189.  N%>cols% 
  13190.  N%=1
  13191.  N%=col% 
  13192.  col%=0 
  13193. #    
  13194.  case% 
  13195.  cell$=
  13196. u(cell$)
  13197.  op$ 
  13198. %      
  13199.  "{":found%=(
  13200. cell$,s$)>0)
  13201. &      
  13202.  "}{":found%=(
  13203. cell$,s$)=0)
  13204. $      
  13205.  "$":found%=
  13206. wc(cell$,s$)
  13207. ,      
  13208. ":found%=
  13209. wc(cell$,s$)      
  13210.       
  13211.       
  13212.  val% 
  13213. &        
  13214. :S$="VAL(cell$)"+op$+s$
  13215. +        
  13216. :S$="cell$"+op$+""""+s$+""""
  13217.       
  13218.       found%=
  13219.         
  13220.  found% 
  13221. close_file(F)
  13222. =found%
  13223.  ### End of scrollable-list routines ###
  13224. get_winpos
  13225.  F,x%,y%,w%,h%,xs%,ys%,ic%
  13226.  design% 
  13227. (  w%=ScreenWidth%*2:h%=MaxFields%*64
  13228.   x%=0:y%=0:xs%=0:ys%=0
  13229. 4  !block%=0:block%!4=-h%:block%!8=w%:block%!12=0
  13230.  "Wimp_SetExtent",mainW%,block%
  13231. position_window(mainW%,x%,y%,w%,h%,xs%,ys%)
  13232. ($database%+".Winpos")
  13233.  F=0 
  13234. 7    !block%=mainW%:
  13235.  "Wimp_GetWindowState",,block%
  13236. /    
  13237. position_window(mainW%,200,-1,0,0,0,0)
  13238. K    
  13239.  ShowTools% 
  13240.  Tools%=1 
  13241. position_window(keypadW%,100,50,0,0,0,0)
  13242.         
  13243. #F,x%,y%,w%,h%,xs%,ys%
  13244. 4    
  13245. position_window(mainW%,x%,y%,w%,h%,xs%,ys%)
  13246.  ShowTools% 
  13247.       
  13248.  Tools% 
  13249.         
  13250. #        
  13251. #F,x%,y%,w%,h%,xs%,ys%
  13252. :        
  13253. position_window(keypadW%,x%,y%,w%,h%,xs%,ys%)
  13254. 9        
  13255. position_window(keypadW%,100,50,0,0,0,0)
  13256.       
  13257.         
  13258. close_file(F)
  13259. save_winpos
  13260. $database%,4)="CDFS" 
  13261. ($database%+".Winpos")
  13262. save_window(mainW%)
  13263.  Tools%=1 
  13264. save_window(keypadW%)
  13265. #F,650,400,658,316,0,0
  13266. close_file(F)
  13267. save_window(handle%)
  13268.  x%,y%,w%,h%,xs%,ys%,ic%
  13269. 4!block%=handle%:
  13270.  "Wimp_GetWindowState",,block%
  13271. ;x%=block%!4:y%=block%!8:w%=block%!12-x%:h%=block%!16-y%
  13272. xs%=block%!20:ys%=block%!24
  13273. #F,x%,y%,w%,h%,xs%,ys%
  13274. position_window(wi%,x%,y%,w%,h%,xs%,ys%)
  13275.  wi% 
  13276.  matchW%,savesubW%:
  13277. shade(queryW%,4,
  13278. default_query
  13279.  changeW%,moveW%,filterW%:
  13280. shade(queryW%,4,
  13281. default_query
  13282.  "Wimp_GetCaretPosition",,block%
  13283. 0!block%=wi%:
  13284.  "Wimp_GetWindowState",,block%
  13285.  w%=0 
  13286.  w%=block%!12-block%!4
  13287.  h%=0 
  13288.  h%=block%!16-block%!8
  13289.  0:x%=(ScreenWidth%-w%) 
  13290.  -1:x%=block%!4
  13291.  0: y%=(ScreenHeight%-h%) 
  13292.  -1:y%=block%!8
  13293. block%!4=x%:block%!12=x%+w%
  13294. block%!8=y%:block%!16=y%+h%
  13295. block%!20=xs%:block%!24=ys%
  13296. block%!28=-1
  13297.  "Wimp_OpenWindow",,block%
  13298. open_it(wi%)
  13299. default_query
  13300.  f$,d%
  13301. $f$=$database%+".PrintRes.!Query"
  13302.  "OS_File",5,f$ 
  13303.  d%=1 
  13304.  "OS_File",255,f$,Query% 
  13305.  $Query%=""
  13306. open_at(
  13307.  flag%,wi%,butt%,ww%,wh%,iw%,ih%)
  13308.  x%,y%,vxmin%,vymax%,scrollx%,scrolly%
  13309.  flag% 
  13310. &    5  !block%=mainW%:
  13311.  "Wimp_GetWindowState",,block%
  13312. L  vxmin%=block%!4:vymax%=block%!16:scrollx%=block%!20:scrolly%=block%!24
  13313. Z  !block%=mainW%:block%!4=field%(buttonfield%(0,butt%)):
  13314.  "Wimp_GetIconState",,block%
  13315. ?  x%=block%!16-scrollx%+vxmin%:y%=block%!20-scrolly%+vymax%
  13316. 2  !block%=wi%:
  13317.  "Wimp_GetWindowState",,block%
  13318. 6  block%!4=x%-(ww%+iw%) 
  13319.  2:block%!12=block%!4+ww%
  13320. 6  block%!8=y%-(wh%+ih%) 
  13321.  2:block%!16=block%!8+wh%
  13322.    block%!28=-1:
  13323. open_it(wi%)
  13324.   flag%=
  13325. open_window(wi%)
  13326. set_up_select(fields%,
  13327.  rows%)
  13328.  S$,I%,J%,Fptr%
  13329. ASHselectptr%=
  13330. extend_named_sliding_block(selanchor%,SHclaim%)
  13331. Fptr%=SHselectptr%
  13332.  I%=1 
  13333.  fields%
  13334. =  SHselectptr%=
  13335. claim_page(selanchor%,Fptr%-SHselectptr%)
  13336.  chartype%(I%) 
  13337. .    
  13338.  3,6,8,46,47,54,56,57,74,75,77,78,79:
  13339. "    rows%+=1:
  13340. lit(printM%,5,
  13341. W    handle%=
  13342. create_icon(0,numscrollW%,0,-rows%*48,144,48,&17000531,"",Fptr%,-1,15)
  13343. & 9    S$=$
  13344. text(mainW%,desc%(I%)):
  13345. (S$)>8 
  13346. S$,8)
  13347. &!$    $Fptr%=S$:Fptr%+=
  13348. ($Fptr%)+1
  13349. &"Y    handle%=
  13350. create_icon(0,numscrollW%,140,-rows%*48,100,48,&17000531,"",Fptr%,-1,15)
  13351. &#*    $Fptr%=Tag$(I%):Fptr%+=
  13352. ($Fptr%)+1
  13353.  J%=0 
  13354. &%b      handle%=
  13355. create_icon(0,numscrollW%,240+J%*88,-rows%*48,44,44,&0740B13B,"",Fptr%,tick%,1)
  13356.       $Fptr%="":Fptr%+=1
  13357.     calcrow%?I%=rows%
  13358. :calcrow%?I%=0
  13359. &,"!block%=0:block%!4=-rows%*48-4
  13360. block%!8=740:block%!12=0
  13361.  "Wimp_SetExtent",numscrollW%,block%
  13362. enable_row(R%,on%)
  13363.  R%>0 
  13364.  I%=R%*8-6 
  13365.  R%*8-1
  13366. &5"    
  13367. shade(numscrollW%,I%,on%)
  13368. &6+    
  13369.  on% 
  13370. deselect(numscrollW%,I%)
  13371. save_form(f$)
  13372.  F,I%,xd%,yd%,xf%,yf%,w%,h%,bbox%,char%,dicon%,ficon%,Desc$
  13373.  fields%=0 
  13374. Length%=0
  13375. !block%=mainW%
  13376. #F,fields%
  13377.  I%=1 
  13378.  fields%
  13379.   char%=chartype%(I%)
  13380.  char%=39 
  13381.  len%(I%)=0
  13382. &E(  dicon%=desc%(I%):ficon%=field%(I%)
  13383. &F4  block%!4=dicon%:
  13384.  "Wimp_GetIconState",,block%
  13385. &G   xd%=block%!8:yd%=block%!12
  13386.   Desc$=$(block%!28)
  13387. &I4  block%!4=ficon%:
  13388.  "Wimp_GetIconState",,block%
  13389. &J   xf%=block%!8:yf%=block%!12
  13390. &K2  w%=block%!16-block%!8:h%=block%!20-block%!12
  13391.   bbox%=(h%<<16)+w%
  13392. &M&  
  13393.  hide%?I%=1 
  13394.  char%=char% 
  13395. &N+  
  13396.  mandatory%?I%=1 
  13397.  char%=char% 
  13398. &O+  
  13399.  displayit%?I%=1 
  13400.  char%=char% 
  13401. &PF  
  13402. #F,Desc$,Tag$(I%),xd%,yd%,xf%,yf%,len%(I%),char%,fix%(I%),bbox%
  13403. &Q8  
  13404.  len%(I%)>0 
  13405.  dbtype$="old" 
  13406.  Length%+=len%(I%)+1
  13407.   field$(I%)=""
  13408. close_file(F)
  13409.  "OS_File",18,f$,&7f2
  13410. lit(iconbarM%,3,
  13411. make_empty_index(RA%,key%,Z%)
  13412.  I%,K%,P%,KLM%,S$
  13413.  "Hourglass_On"
  13414. KL%(key%),".")
  13415. KLM%=KL%(key%)+13
  13416. P%=LH%+48+(RA%+1)*KLM%
  13417.  SHkeyptr%(key%)=
  13418. extend_named_sliding_block(keyanchor%(key%),P%)
  13419. keybase%=SHkeyptr%(key%)
  13420. keybase%!0=138
  13421. keybase%!4=
  13422. ($Increment%)
  13423. $date%=
  13424. (1)):
  13425. date(key%)
  13426. keybase%!62=0:keybase%!66=0
  13427. keybase%?70=KL%(key%)
  13428. &fCkeybase%?71=
  13429. selected(keyW%,30):case%(key%)=
  13430. selected(keyW%,30)
  13431. &gGkeybase%?72=
  13432. selected(keyW%,35):incspace%(key%)=
  13433. selected(keyW%,35)
  13434. &hCkeybase%?73=
  13435. selected(keyW%,37):null%(key%)=
  13436. selected(keyW%,37)
  13437.  I%=0 
  13438. &j(  !(keybase%+74+(I%*4))=KW%(key%,I%)
  13439.  I%=0 
  13440.   P%=I%*8+LH%
  13441.   !(keybase%+P%)=-P%
  13442.   !(keybase%+P%+4)=P%
  13443. P%=!keybase%
  13444.  I%=0 
  13445.  RA%-1
  13446. &s.  
  13447.  "Hourglass_Percentage",(I%*100) 
  13448.   !(keybase%+P%)=P%+KLM%
  13449.   !(keybase%+P%+4)=0
  13450.   $(keybase%+P%+8)=S$
  13451. &w#  !(keybase%+P%+KL%(key%)+9)=I%
  13452.   P%+=KLM%
  13453. !(keybase%+P%)=0
  13454. !(keybase%+P%+4)=0
  13455. $(keybase%+P%+8)=S$
  13456. &} !(keybase%+P%+KL%(key%)+9)=0
  13457.  "Hourglass_Off"
  13458. save_recs(f$,RA%)
  13459.  dbasehandle%,I%,J%,zero%,rec$
  13460.  I%=1 
  13461.  fields%
  13462.  len%(I%)=0 
  13463.  zero%+=1
  13464.  rec$=
  13465. fields%-zero%-1,
  13466. (10))
  13467.  "Hourglass_On"
  13468. dbasehandle%=
  13469.  I%=0 
  13470. #dbasehandle%=I%*Length%
  13471. #dbasehandle%,rec$
  13472.  "Hourglass_Percentage",(I%*100) 
  13473. #dbasehandle%=(RA%+1)*Length%
  13474. close_file(dbasehandle%)
  13475.  "OS_File",18,f$,&fff
  13476.  "Hourglass_Off"
  13477. move_records(key%,source%,dest%,top)
  13478.  P%,R%,target$,action$,blobs$,ex%,ptr%,file%,deleted%
  13479. "target$=$Query%:Search$=
  13480. parse
  13481. Title$,"."):Title$=" "+
  13482. Title$,P%+2)
  13483.  I%=1 
  13484. (Title$)
  13485. Title$,I%,1)="," 
  13486. Title$,I%,1)=" "
  13487.  target$="" 
  13488.  MarkedRecs%>0 
  13489.     bit$=Title$+" ,"
  13490.  bit$=" all ,"
  13491.   tail$=""
  13492.  bit$=" ,":tail$="when "+Title$
  13493.  "Wimp_WhichIcon",moveW%,block%,&003F0000,&00210000
  13494. movetype%=!block%
  13495.  movetype% 
  13496.  4:action$=
  13497. msg("Err138,"+bit$+
  13498. (source%)+","+
  13499. (dest%)+","+tail$):
  13500.  Move
  13501.  5:action$=
  13502. msg("Err140,"+bit$+
  13503. (source%)+","+tail$):
  13504. selected(prefsW%,15) 
  13505.  action$+=". "+
  13506. msg("Err141"):
  13507.  Delete
  13508.  6:action$=
  13509. msg("Err139,"+bit$+
  13510. (source%)+","+tail$):dest%=source%:
  13511.  Collect
  13512.  file%=0 
  13513.  movetype% 
  13514. 7    
  13515.  4,5:
  13516.  file%=source% 
  13517.  filemem%(file%,key%)=-1
  13518. 4    
  13519.  dest%<>file% 
  13520.  filemem%(file%,key%)=-1
  13521.  file%
  13522. confirm(action$) 
  13523.  I%=1 
  13524.  fields%
  13525.   V%=chartype%(I%)
  13526.  36,37,38,39,40:
  13527.     blobs$+=
  13528. (I%)+","
  13529.  blobs$<>"" 
  13530.  deleted%=
  13531. ($database%+".Deleted")
  13532.  "Hourglass_On"
  13533. *dbasehandle%=
  13534. ($database%+".Database")
  13535. 8SHmisc%=
  13536. extend_named_sliding_block(tempanchor%,RA%)
  13537. earmark(SHmisc%,
  13538. ,file%,top)
  13539. close_file(dbasehandle%)
  13540.  R%=0 
  13541.  RA%-1
  13542. 6  ex%+=1:
  13543.  "Hourglass_Percentage",(ex%*100) 
  13544.   ptr%=SHmisc%
  13545.   file%=ptr%?R%
  13546.  file%<>255 
  13547.  movetype% 
  13548. N      
  13549.  4,5:
  13550.  file%=source% 
  13551. transfer_record(R%,blobs$):
  13552.  MOVE or DELETE
  13553. G      
  13554.  dest%<>file% 
  13555. transfer_record(R%,blobs$):
  13556.  ACCUMULATE
  13557.         
  13558. close_file(deleted%)
  13559.  "Hourglass_Off"
  13560. asterisk(
  13561. transfer_record(REC%,blobs$)
  13562.  key%,F%,P%,V%
  13563. read(
  13564. ,fields%,
  13565. ,REC%,$database%)
  13566.   top=8*file%+LH%
  13567.   N$=key$(key%)
  13568. delete(N$,key%):date%?file%=1:$Date%(file%)=
  13569. today
  13570.  N$<>"*Failed*" 
  13571.  movetype% 
  13572.       
  13573.       
  13574.  DELETE
  13575. 0      
  13576. selected(prefsW%,15) 
  13577. blank(REC%)
  13578.       
  13579.  blobs$<>""
  13580.         F%=
  13581. (blobs$)
  13582.         P%=
  13583. blobs$,",")
  13584.          blobs$=
  13585. blobs$,P%+1)
  13586.         V%=chartype%(F%)
  13587. 9        
  13588. blob_path(
  13589. ,$database%,REC%,F%,V%,F$)>=0 
  13590. '          
  13591. selected(prefsW%,15) 
  13592. (            
  13593.  "OS_CLI","Delete "+F$
  13594.             
  13595. ,            
  13596.  "OS_CLI","Remove "+F$+"D"
  13597. E            
  13598.  "OS_CLI","Rename "+F$+" "+F$+"D":
  13599. #deleted%,F$+"D"
  13600.           
  13601.         
  13602.       
  13603.       
  13604.       
  13605.  MOVE
  13606.       top=8*dest%+LH%
  13607. F      
  13608. insert(N$,key%,dupwarn%):date%?dest%=1:$Date%(dest%)=
  13609. today
  13610.         
  13611.   key%+=1
  13612.  key%>Keys% 
  13613.  N$="*Failed*"
  13614. export_subset(f$)
  13615.  I%,F,R%,R4%,recs%,ptr%,count%,subtotal%,blobs%,ex%,Z%,len%,source$,dest$,O$,REC%,zero%,remove%,S$
  13616.  R4%<>-1
  13617.  "OS_GBPB",9,$database%,block%,1,R4%,255 
  13618.  ,,S$,,R4%
  13619. ?    
  13620.  "Indices","Menus","PrintRes","ValTables","UserFuncs":
  13621. D    
  13622.  "OS_CLI","Copy "+$database%+"."+S$+" "+f$+"."+S$+" ~C~VR"
  13623. }    
  13624.  "Form","FieldCols","!Run","Link","Data","Calc","Config","UsrSprites","CSVoptions","Preference","Subfiles","Winpos":
  13625. C    
  13626.  "OS_CLI","Copy "+$database%+"."+S$+" "+f$+"."+S$+" ~C~V"
  13627.  "Hourglass_On"
  13628. 8SHmisc%=
  13629. extend_named_sliding_block(tempanchor%,RA%)
  13630. Search$=
  13631. parse
  13632. *dbasehandle%=
  13633. ($database%+".Database")
  13634. earmark(SHmisc%,
  13635. ,file%,top)
  13636. (f$+".Database")
  13637. ptr%=SHmisc%
  13638. %subtotal%=
  13639. count_recs(key%,zero%)
  13640. "blobs%=
  13641. find_blobs($database%)
  13642.  I%=0 
  13643.  RA%-1
  13644.  ptr%?I%<>255 
  13645.     ex%=-1
  13646.  ex%<blobs%
  13647.       ex%+=1:F%=Ext%(ex%)
  13648. =      
  13649. copy_blob($database%,f$,I%,recs%,F%,chartype%(F%))
  13650.         
  13651. <    
  13652. readsmarray(dbasehandle%,I%):
  13653. writesmarray(F,recs%)
  13654.     count%+=1
  13655. :    
  13656.  "Hourglass_Percentage",(count%*100) 
  13657.  subtotal%
  13658.  ex%=0 
  13659.  blobs%
  13660.   F%=Ext%(ex%)
  13661.  vtype$(chartype%(F%))="L" 
  13662. #    S$=Tag$(F%)+"scroll.Format"
  13663. D    
  13664.  "XOS_CLI","Copy "+$database%+"."+S$+" "+f$+"."+S$+" ~C~V"
  13665. "    S$=Tag$(F%)+"scroll.Blank"
  13666. D    
  13667.  "XOS_CLI","Copy "+$database%+"."+S$+" "+f$+"."+S$+" ~C~V"
  13668.      S$=Tag$(F%)+"scroll.Max"
  13669. D    
  13670.  "XOS_CLI","Copy "+$database%+"."+S$+" "+f$+"."+S$+" ~C~V"
  13671.  recs%>0 
  13672. ?  F$()="":
  13673. writesmarray(F,recs%):
  13674. #F=Length%*recs%:recs%-=1
  13675.  K%=0 
  13676.  Keys%
  13677.     KL%(MaxKeys%+1)=KL%(K%)
  13678.  I%=0 
  13679. '"'      KF%(MaxKeys%+1,I%)=KF%(K%,I%)
  13680. '#'      KW%(MaxKeys%+1,I%)=KW%(K%,I%)
  13681. '%-    
  13682. make_empty_index(recs%,MaxKeys%+1,
  13683.  REC%=0 
  13684.  recs%-1
  13685.       
  13686. readsmarray(F,REC%)
  13687.       KEY$=
  13688. key2(K%,1)
  13689. ')$      
  13690. insert(KEY$,MaxKeys%+1,
  13691. '*6      
  13692.  "Hourglass_Percentage",(REC%*100) 
  13693.  recs%
  13694.  REC%
  13695. ',&    keybase%=SHkeyptr%(MaxKeys%+1)
  13696. '-?    filelength%=
  13697. sliding_block_size(keyanchor%(MaxKeys%+1))
  13698. '..    
  13699.  K%>0 
  13700.  index$="Indices." 
  13701.  index$=""
  13702. '/T    
  13703.  "OS_File",10,f$+"."+index$+Index$(K%),&7f0,,keybase%,keybase%+filelength%
  13704. '0,    
  13705. scrap_block(keyanchor%(MaxKeys%+1))
  13706. '2+  
  13707. softerror(
  13708. leaf(f$),171):remove%=
  13709. close_file(F)
  13710. close_file(dbasehandle%)
  13711.  "OS_File",18,f$+".Database",&fff
  13712. export%=
  13713.  "Hourglass_Off"
  13714. close_it(savesubW%)
  13715.  remove% 
  13716. ';*  
  13717.  "OS_CLI","Remove "+f$+".Database"
  13718. '<D  
  13719. write_log(-1,"Subset exported:",
  13720. leaf(f$)+" ("+$Query%+")")
  13721. copy_files(source$,dest$)
  13722.  N%,R4%,S$,S%
  13723.  "OS_CLI","Remove "+dest$+".PrimaryKey"
  13724.  "OS_CLI","Remove "+dest$+".Database"
  13725.  These may not be present but remove if they are
  13726. 'E    N%=-1
  13727.  R4%<>-1
  13728. 'G9  
  13729.  "OS_GBPB",9,source$,block%,1,R4%,255 
  13730.  ,,S$,,R4%
  13731. 'I?    
  13732.  "Indices","Menus","PrintJobs","PrintRes","ValTables":
  13733. 'JD    
  13734.  "OS_CLI","Copy "+source$+"."+S$+" "+dest$+"."+S$+" ~C~VR"
  13735. 'Kq    
  13736.  "PrimaryKey","Config","UserFuncs","UsrSprites","CSVoptions","Preference","FieldCols","Data","Subfiles":
  13737. 'LG    
  13738.  "OS_CLI","Copy "+source$+"."+S$+" "+dest$+"."+S$+" ~C~V"    
  13739. 'O    R4%=0
  13740.  R4%<>-1
  13741. 'Q9  
  13742.  "OS_GBPB",9,source$,block%,1,R4%,255 
  13743.  ,,S$,,R4%
  13744. S$,4) 
  13745. 'S&    
  13746.  "text","draw","rite","roll":
  13747. 'TD    
  13748.  "OS_CLI","Copy "+source$+"."+S$+" "+dest$+"."+S$+" ~C~VR"
  13749. find_blobs(f$)
  13750.  N%,R4%,S$
  13751. N%=-1:Ext%()=0
  13752.  R4%<>-1
  13753. ']4  
  13754.  "OS_GBPB",9,f$,block%,1,R4%,255 
  13755.  ,,S$,,R4%
  13756. S$,4) 
  13757. '_)    
  13758.  "text","draw":tag$=
  13759. (S$)-4)
  13760. '`(    N%+=1:Ext%(N%)=
  13761. field(X%,tag$,
  13762. 'a)    
  13763.  "rite","roll":tag$=
  13764. (S$)-6)
  13765. 'b(    N%+=1:Ext%(N%)=
  13766. field(X%,tag$,
  13767. earmark(ptr%,all%,file%,top)
  13768.  I%,P%
  13769.  I%=0 
  13770.  RA%-1
  13771.   ptr%?I%=255
  13772.  "Hourglass_On"
  13773.  file%=0 
  13774.  all% 
  13775.     top=8*file%+LH%
  13776. 'p!    P%=
  13777. neighbour(key%,top,1)
  13778. 'q,    
  13779. scan_file("P%<>top",key%,file%,2,1)
  13780. 'r        
  13781. 's&    
  13782. selected(queryW%,file%+6) 
  13783.       top=8*file%+LH%
  13784. 'u#      P%=
  13785. neighbour(key%,top,1)
  13786. 'v.      
  13787. scan_file("P%<>top",key%,file%,2,1)
  13788. 'w        
  13789.  file%
  13790.  "Hourglass_Off"
  13791. rotate
  13792.  Access% 
  13793. confirm(
  13794. msg("Err49"))=
  13795.  keybase%
  13796.  I%,L%,Z%,Q%,R%,S%,key%
  13797.  key%=0 
  13798.  Keys%
  13799.   keybase%=SHkeyptr%(key%)
  13800.   S%=LH%+40
  13801.   Z%=keybase%!S%
  13802.  I%=S%-8 
  13803.  S%-40 
  13804. )    L%=keybase%!I%:R%=keybase%!(I%+4)
  13805. =    
  13806.  L%>0 
  13807.  keybase%!(I%+8)=L% 
  13808.  keybase%!(I%+8)=-(I%+8)
  13809.  Z%>0 
  13810.  keybase%!(S%-40)=Z% 
  13811.  keybase%!(S%-40)=-(S%-40)
  13812.  I%=S%-40 
  13813.     Q%=I%-8
  13814.  Q%=S%-48 
  13815.  Q%=S%
  13816. !    PR%=
  13817. neighbour(key%,I%,0)
  13818. !    SU%=
  13819. neighbour(key%,I%,1)
  13820. '    
  13821.  PR%>S% 
  13822.  keybase%!(PR%+4)=-I%
  13823. #    
  13824.  SU%>S% 
  13825.  keybase%!SU%=-I%
  13826.  key%
  13827. $date%=
  13828. asterisk(
  13829. write_log(-1,"Subfiles rotated","")
  13830. create_index(key%,warn%)
  13831.  indexing% 
  13832.  printing% 
  13833.  file%,top,P%,KEY$,REC%,val$,zero%,replace%,J%,I%,used$,abort%,Z%
  13834. newkey%=0:f$=""
  13835.  J%=0 
  13836.  keyfield%(J%)>0 
  13837. #    f$+=Tag$(keyfield%(J%))+"+"
  13838.     Z%=
  13839.  I%=0 
  13840. *      
  13841.  keyfield%(J%)=KF%(0,I%) 
  13842. -    
  13843.  used$+=Tag$(keyfield%(J%))+";"
  13844. used$=
  13845. used$)
  13846.  used$<>"" 
  13847.  warn%=
  13848. confirm(
  13849. msg("Err100,"+used$))=
  13850. f$)="+"
  13851. u(f$)
  13852.   newkey%+=1
  13853. u(Index$(newkey%))=f$ 
  13854.  newkey%>Keys%
  13855.  newkey%=key%:
  13856. softerror(f$,106):abort%=
  13857.  newkey%<=Keys%:
  13858.   replace%=
  13859.  warn% 
  13860. confirm(
  13861. msg("Err50,"+f$))=
  13862.  abort%=
  13863.  Keys%=MaxKeys%:
  13864. softerror("subsidiary indices,"+
  13865. (Keys%)+",Keys",23):abort%=
  13866. :Keys%=newkey%
  13867.  abort% 
  13868. copy_keydata(newkey%)
  13869. Index$(newkey%)=f$
  13870. -f$=$database%+".Indices."+Index$(newkey%)
  13871. make_empty_index(RA%,newkey%,
  13872. lit(iconbarM%,2,
  13873. limit_actions(
  13874. ,multitask%)
  13875. abort_index(f$):
  13876. *dbasehandle%=
  13877. ($database%+".Database")
  13878. indexing%=
  13879. :Search$="TRUE"
  13880. update_stats
  13881.  "Hourglass_On"
  13882.  file%=0 
  13883.   top=file%*8+LH%
  13884.   P%=
  13885. neighbour(key%,top,1)
  13886.   val$=
  13887. type(newkey%)
  13888.  "Hourglass_On"
  13889. scan_file("P%<>top",key%,file%,4,1)
  13890.  file%
  13891.  "Hourglass_Off"
  13892. end_index
  13893. refresh_pointers
  13894. save_keys
  13895. colour(newkey%,2)
  13896. asterisk(
  13897. make_index_menu
  13898. renew_tables
  13899. write_log(-1,"Index "+Index$(newkey%)+" created","")
  13900. refresh_pointers
  13901.  I%=0 
  13902.  Keys%
  13903. #  SHkeyptr%(I%)=!keyanchor%(I%)
  13904. remove_index(name$,rename%)
  13905.  I%,f$,entry$
  13906. Fkey%=0:
  13907. colour(key%,1):
  13908. set_keydata(key%):addr=
  13909. moveto(key%,top,1)
  13910. text(searchW%,3)=Index$(key%):
  13911. redraw_icon(searchW%,3)
  13912. f$=$database%+".Indices."
  13913.  I%=1 
  13914.  Keys%
  13915.   entry$=Index$(I%)
  13916.  entry$=name$ 
  13917.     Index$(I%)=""
  13918.  rename% 
  13919. .      
  13920.  "OS_File",5,f$+"Del_"+entry$ 
  13921. =      
  13922.  d%=1 
  13923.  "OS_CLI","Remove "+f$+"Del_"+entry$    
  13924. =      
  13925.  "OS_CLI","Rename "+f$+name$+" "+f$+"Del_"+entry$
  13926. *      
  13927.  "OS_CLI","Remove "+f$+name$
  13928.         
  13929. colour(I%,3)
  13930. make_index_menu
  13931. renew_tables
  13932. make_index_menu
  13933.  ptr%,menu$,I%
  13934. "menu_ptr%=
  13935. clear_dynamic_menus
  13936. ptr%=menu_ptr%
  13937.  Keys%>0 
  13938.   menu$="Indices,"
  13939.  I%=1 
  13940.  Keys%
  13941. E    
  13942.  hide%?KF%(I%,0)<>1 
  13943.  Index$(I%)<>"" 
  13944.  menu$+=Index$(I%)+","
  13945.   menu$=
  13946. menu$)
  13947.  menu$<>"Indices" 
  13948. ,    indicesM%=
  13949. create_menu(ptr%,menu$)  
  13950. :    ptr%=indexM%+52:ptr%!4=indicesM%:
  13951. lit(indexM%,1,
  13952. 5    
  13953.  ptr%=indexM%+52:ptr%!4=-1:
  13954. lit(indexM%,1,
  13955. abort_index(f$)
  13956. end_index
  13957.  replace% 
  13958. load_index(f$,newkey%,
  13959.  index%=newkey% 
  13960.  Keys%
  13961. )    Index$(newkey%)=Index$(newkey%+1)
  13962.  index%
  13963. scrap_block(keyanchor%(newkey%))
  13964.   Keys%-=1
  13965.   newkey%=0
  13966. softerror("",43)
  13967. wimp_error(
  13968. end_index
  13969.  "Hourglass_Smash"
  13970. indexing%=
  13971. limit_actions(Access%,multitask%)
  13972.  "Wimp_CreateMenu",,-1
  13973. lit(iconbarM%,2,Modify%)
  13974. close_file(dbasehandle%)
  13975. shift(t%,k%,m%)
  13976.  a%,key%,fi%,I%,F$,action$,finished%,fail%
  13977.  Access% 
  13978. =addr
  13979.  key$(0)="" 
  13980. =addr
  13981.  REC%=RA% 
  13982. =addr
  13983.  t%=0 
  13984.  m%=1 
  13985. confirm(
  13986. msg("Err51"))=
  13987. =addr
  13988.   N$=key$(key%)
  13989. delete(N$,key%)
  13990. (+:  
  13991.  key%=k% 
  13992. next_match(addr,1,Filter$,finished%)
  13993. (,   
  13994.  t%=1 
  13995.  fi%=(file%+1) 
  13996. (-)  
  13997.  t%=-1 
  13998.  fi%=(file%-1-6*(file%=0))
  13999.   top=8*fi%+LH%
  14000.  I%=1 
  14001.  fields%
  14002.       V%=chartype%(I%)
  14003.       
  14004. (4)        
  14005.  36,37,38,39,40,64,65,66,67:
  14006. (5R        
  14007. blob_path(
  14008. ,$database%,REC%,I%,V%,F$)>=0 
  14009.  "OS_CLI","Delete "+F$
  14010.       
  14011. (9@    
  14012. insert(N$,key%,dupwarn%):date%?fi%=1:$Date%(fi%)=
  14013. today
  14014.   top=8*file%+LH%
  14015.   date%?file%=1
  14016.   $Date%(file%)=
  14017. today
  14018.   key%+=1
  14019.  key%>Keys% 
  14020.  N$="*Failed*"
  14021.  N$="*Failed*" 
  14022. =addr
  14023. selected(prefsW%,15) 
  14024. blank(REC%)
  14025. (E&    action$=" Deleted and blanked"
  14026.  action$=" Deleted"
  14027. (H'  
  14028. :action$=" ===> subfile "+
  14029. (fi%)
  14030. asterisk(
  14031. write_log(REC%,logentry$+action$,"")
  14032. blank(REC%)
  14033.  dbasehandle%
  14034. (P*dbasehandle%=
  14035. ($database%+".Database")
  14036. (Q,F$()="":
  14037. writesmarray(dbasehandle%,REC%)
  14038. close_file(dbasehandle%)
  14039. type(key%)
  14040.  F%,V$
  14041.  key%>=0 
  14042.  F%=KF%(key%,0) 
  14043.  F%=-key%
  14044.  chartype%(F%) 
  14045. (Y2  
  14046.  3,6,46,47,54,56,57,74,75,77,78,79:V$="VAL"
  14047. getscreensize(
  14048.  S_Width%,
  14049.  S_Height%,
  14050.  Vpix%)
  14051.  H1%,V1%,H2%,V2%,End%
  14052. (_$H1%=0:V1%=4:H2%=8:V2%=12:End%=16
  14053. (`9Mi%!H1%=4:Mi%!V1%=5:Mi%!H2%=11:Mi%!V2%=12:Mi%!End%=-1
  14054.  "OS_ReadVduVariables",Mi%,Mo%
  14055. (b)S_Width%=(1<<(Mo%!H1%))*((Mo%!H2%)+1)
  14056. (c*S_Height%=(1<<(Mo%!V1%))*((Mo%!V2%)+1)
  14057. Vpix%=Mo%!V2%+1
  14058. match(X%,Y%)
  14059. check_record 
  14060. deselect(matchW%,
  14061. selected_esg(matchW%,1))
  14062. select(matchW%,8):$
  14063. text(matchW%,0)="Print"
  14064. text(queryW%,5)="":
  14065. redraw_icon(queryW%,5)
  14066. shade(matchW%,4,
  14067. shade(matchW%,6,
  14068. shade(matchW%,12,
  14069. shade(matchW%,7,printorder$<>"")
  14070. lit(printM%,9,printorder$<>"")
  14071.  QBE% 
  14072. set_dest_sprite
  14073. (q-  
  14074. position_window(matchW%,X%,Y%,0,0,0,0)
  14075. set_caret(0,queryW%,0)
  14076. (sN  
  14077.  Match_tag%>0 
  14078. text(helpW%,0)=Tag$(Match_tag%) 
  14079. text(helpW%,0)=""
  14080. (t$  fieldsM%=
  14081. field_menu(items%,1)
  14082. (u2  
  14083. tick_one(fieldsM%,0,fields%-1,Match_tag%-1)
  14084. redraw_icon(helpW%,0)
  14085.  Ecalc% 
  14086. (x!    
  14087. text(matchW%,13)=""
  14088. (y'    
  14089. text(matchW%,13)="1 calc"
  14090. (z/    
  14091. text(matchW%,13)=
  14092. (Ecalc%)+" calcs"
  14093. redraw_icon(matchW%,13)
  14094. (}2  
  14095. select(matchW%,2):
  14096. mouse(0,0,4,matchW%,2)
  14097. matching%=
  14098.  List printing -----------------------------------------------------
  14099. do_it(Search$,displayed%)
  14100.  printing% 
  14101.  zero%,P%,rec%,copy%,sel$,default%,matchopt%,stime%,sorton%,concatenations%
  14102.  Sum(),S$(),f%()
  14103.  Sum(numericfields%,5),S$(5),f%(5)
  14104. 2S$()="Items","Sum","Mean","StdDev","Max","Min"
  14105. wimp_error(
  14106. &matchopt%=
  14107. selected_esg(matchW%,1)
  14108. printed%=0
  14109.  matchopt%=8 
  14110. print_init("")
  14111.  printorder$="" 
  14112. .    sel$=$database%+".PrintRes.!Selection"
  14113. &    
  14114.  "OS_File",5,sel$ 
  14115.  default%
  14116.  default%=0 
  14117.       
  14118.  W%=0 
  14119.         F%=KF%(0,W%)
  14120.         
  14121.  F%>0 
  14122. T          F$=
  14123. ~(F%):
  14124. (F$)=1 
  14125.  F$="0"+F$:
  14126. printorder$,F$)=0 
  14127.  printorder$+=F$
  14128. p          
  14129. select(mainW%,field%(F%)):
  14130. lit(printM%,7,
  14131. lit(printM%,8,
  14132. lit(mainM%,7,
  14133. selected(passW%,13))
  14134.         
  14135.       
  14136.       default%=1
  14137. !      
  14138. load_selection(sel$)
  14139.         
  14140.   Form$=printorder$
  14141.   PrintFields%=
  14142. (Form$) 
  14143.  format$="label" 
  14144. (    lablines%=labdepth% 
  14145.  linedepth%
  14146. $    
  14147.  fixed1$<>"" 
  14148.  lablines%-=1
  14149. $    
  14150.  fixed2$<>"" 
  14151.  lablines%-=1
  14152. >    
  14153. selected(printerW%,41) 
  14154.  lablines%-=1:
  14155.  Include key
  14156.  I%=1 
  14157. (Form$)-1 
  14158.       F$=
  14159. Form$,I%,2)
  14160.       F%=
  14161. ("&"+F$)
  14162. -      
  14163.  (F% 
  14164.  128)>0 
  14165.  concatenations%+=1
  14166. !    
  14167. abort_report:
  14168. ]    
  14169.  (PrintFields%-concatenations%)>lablines% 
  14170.  moan_err%,
  14171. msg("Err181,"+
  14172. (lablines%))
  14173. %  Heading$="":Hlongest%=0:Sum()=0
  14174.  numericfields%>0 
  14175.  I%=1 
  14176.  numericfields%
  14177.       Sum(I%,5)=10^30
  14178. include_fields:
  14179.  LenLine% is defined in this procedure
  14180.   TextPtr%=!textanchor%
  14181. list_head
  14182.  Error lines moved from here
  14183. abort_report:
  14184.  "Wimp_GetPointerInfo",,block%
  14185. limit_actions(
  14186. ,multitask%)
  14187. lit(iconbarM%,2,0)
  14188. printing%=
  14189.  "OS_ReadMonotonicTime" 
  14190.  stime%
  14191.  ON ERROR statement was originally here
  14192. *dbasehandle%=
  14193. ($database%+".Database")
  14194. !direc%=
  14195. selected(queryW%,4)+1
  14196.  "Hourglass_On"
  14197.  displayed%>=0:
  14198. readsmarray(dbasehandle%,displayed%)
  14199. print_record(displayed%,addr)
  14200.   printed%=1
  14201.  usekey%=-1:
  14202. text(queryW%,5)="":
  14203. redraw_icon(queryW%,5)
  14204. scan_marked_subfiles("P%<>top",key%,1,direc%,
  14205. text(queryW%,5)=
  14206. (usekey%):
  14207. redraw_icon(queryW%,5)
  14208. complete(1)
  14209. scan_marked_subfiles("P%<>top AND LEFT$(k$,kl%)=useval$",usekey%,1,1,
  14210. end_printing
  14211. abort_report
  14212.  reportdest$="Printer" 
  14213.  printhandle%>0 
  14214. *    
  14215.  "PDriver_AbortJob",printhandle%
  14216. !    
  14217. close_file(printhandle%)
  14218. close_it(informW%)
  14219.  "Hourglass_Smash"
  14220.   reportdest$=""
  14221. lose_fonts
  14222.  printing% 
  14223. end_printing
  14224. close_file(dbasehandle%)
  14225. softerror("",29)
  14226. wimp_error(
  14227. end_printing
  14228.  time%,batch%,rem%
  14229.  matchopt% 
  14230. text(matchW%,13)=
  14231. (printed%)+" found":
  14232.  Count
  14233.  Print
  14234.  printed%=0 
  14235. empty_list
  14236.  format$ 
  14237.  "horiz":
  14238. 2    
  14239.  displayed%=-1 
  14240. total_list:
  14241. page_number
  14242.     SHrecptr%=!recanchor%
  14243. 0    
  14244.  shrink% 
  14245. remove_white_space(format$)
  14246. add_spacers(Count%)
  14247.  "table":
  14248. #    
  14249. blank_lines(tabextrarows%)
  14250.      
  14251. total_list:
  14252. page_number
  14253.  "vert":
  14254. 2    
  14255.  displayed%=-1 
  14256. total_list:
  14257. page_number
  14258. 4    
  14259.  shrink% 
  14260. remove_white_space(format$)    
  14261.  "OS_ReadMonotonicTime" 
  14262.  etime%
  14263.   time%=etime%-stime%
  14264. text(matchW%,13)=
  14265. (time% 
  14266.  100)+"."+
  14267. (time% 
  14268.  100)+" sec" 
  14269.  reportdest$ 
  14270.  "Window":
  14271. .    
  14272. selected(printW%,47) 
  14273.  z%=1 
  14274.  z%=-1
  14275. ,    
  14276.  sorton%>0 
  14277. sort_list(sorton%,z%)
  14278. screen_list
  14279.  "File":
  14280. .    
  14281. selected(printW%,47) 
  14282.  z%=1 
  14283.  z%=-1
  14284. 0    
  14285.  sorton%>0 
  14286. sort_list(sorton%,z%)    
  14287. )    =    
  14288.  "OS_GBPB",2,texthandle%,SHtextptr%,Count%*LenLine%
  14289.      
  14290. close_file(texthandle%)
  14291. lose_list
  14292. close_window(saveW%)
  14293.     savetofile%=
  14294.  "Printer":
  14295. "    
  14296.  Count%>0 
  14297.  labcount%>0 
  14298.       
  14299.  sorton%>0 
  14300. 2        
  14301. selected(printW%,47) 
  14302.  z%=1 
  14303.  z%=-1
  14304. "        
  14305. sort_list(sorton%,z%)
  14306.         I%=0:rem%=Count%
  14307. ,        batch%=pagelength%*printcolumns%
  14308.         
  14309.  rem%>batch%
  14310. +          
  14311. direct_print(I%,I%+batch%-1)
  14312. %          I%+=batch%:rem%-=batch%
  14313.         
  14314. '        
  14315. direct_print(I%,I%+rem%-1)
  14316. '        
  14317. direct_print(0,Count%-1)
  14318.       
  14319.         
  14320. (    
  14321.  "PDriver_EndJob",printhandle%
  14322. !    
  14323. close_file(printhandle%)
  14324. .    
  14325.  SYS "PDriver_SelectJob",previousjob%
  14326. lose_fonts
  14327.  Output%=2 
  14328.       
  14329. inform("",194,0)
  14330. )#M      
  14331.  "OS_CLI","Copy <Wimp$ScrapDir>.Printers.PBreport printer: ~CF~V"
  14332. )$@      
  14333.  "OS_CLI","Remove <Wimp$ScrapDir>.Printers.PBreport"
  14334.       
  14335. close_it(informW%)
  14336. )&        
  14337. )((  
  14338. limit_actions(Access%,multitask%)
  14339. ))2  $
  14340. text(queryW%,5)="":
  14341. redraw_icon(queryW%,5)
  14342. )*%  
  14343.  default%=1 
  14344. clear_selection
  14345.  9,10:
  14346.  Mark, Clear
  14347. ),-  $
  14348. text(matchW%,13)=
  14349. (printed%)+" found"
  14350. )--  
  14351. set_icon(markW%,0,(SHmarkptr%?REC%=1))
  14352. close_file(dbasehandle%)
  14353. redraw_icon(matchW%,13)
  14354. lit(iconbarM%,2,Modify%)
  14355. warn_of_marks
  14356.  "Hourglass_Off"
  14357. printing%=
  14358. write_log(-1,"Report printed: "+query$,"")
  14359. remove_white_space(format$)
  14360.  I%,L%,N%,R%,Ls%,line%,LenLine2%,blank$
  14361. Tab2%()=Tab%()
  14362.  format$ 
  14363.  "horiz","table":
  14364. )="  diff%()=maxlen%()-truelen%()
  14365.   Ls%=
  14366. (spacer$)
  14367.   N%=1
  14368.   last%=
  14369. (Form$)-1
  14370.  I%=1 
  14371.  last% 
  14372.     N%+=1
  14373.     F%=
  14374. fnum(
  14375. Form$,I%,2))
  14376.     L%+=diff%(F%)
  14377. )E.    Tab2%(N%)=truelen%(F%)+Tab2%(N%-1)+Ls%
  14378.   LenLine2%=LenLine%-L%
  14379.  "vert":
  14380. )I?  
  14381.  Tab2%(2)+TextLine%>Tab%(3) 
  14382.  Tab%(3)=Tab2%(2)+TextLine%
  14383.   LenLine2%=Tab%(3)+2
  14384.  LenLine2%<maxhead%+3 
  14385.   LenLine2%=maxhead%+3
  14386. )N'  blank$=
  14387. maxhead%-Tab2%(N%)+2," ")
  14388. TextPtr%=SHtextptr%
  14389. TextPtr2%=TextPtr%
  14390.  line%=0 
  14391.  Count%-1
  14392.  format$ 
  14393.  "horiz","table":
  14394.     R%=SHrecptr%!(line%*4)
  14395.  R%=-2 
  14396. )WP      
  14397.  "Wimp_TransferBlock",mytask%,TextPtr%,mytask%,TextPtr2%,LenLine2%-1
  14398.       
  14399. shrink
  14400. )Y        
  14401.  "vert":
  14402. )[N    
  14403.  "Wimp_TransferBlock",mytask%,TextPtr%,mytask%,TextPtr2%,LenLine2%-1
  14404. )]   TextPtr2%?(LenLine2%-2)=32
  14405. )^   TextPtr2%?(LenLine2%-1)=10
  14406.   TextPtr2%+=LenLine2%
  14407.   TextPtr%+=LenLine%
  14408.  line%
  14409. Tab%()=Tab2%()
  14410. LenLine%=LenLine2%
  14411. TextPtr%=!textanchor%
  14412. )eGSHtextptr%=
  14413. extend_named_sliding_block(textanchor%,Count%*LenLine%)
  14414. SHrecptr%=!recanchor%
  14415. shrink%=
  14416. shrink
  14417.  I%=0 
  14418.  N%-1
  14419.   from%=TextPtr%+Tab%(I%)
  14420.   to%=TextPtr2%+Tab2%(I%)
  14421. )n   bytes%=Tab%(I%+1)-Tab%(I%)
  14422. )o>  
  14423.  "Wimp_TransferBlock",mytask%,from%,mytask%,to%,bytes%
  14424. )q#$(TextPtr2%+Tab2%(N%)-1)=blank$
  14425. add_spacers(N%)
  14426.  B%,I%,L%,P%,T%,fields%,sp$
  14427.  vrules% 
  14428. (spacer$)
  14429.  spacer$=
  14430. L%," ") 
  14431. TextPtr%=SHtextptr%
  14432. fields%=
  14433. (Form$) 
  14434. ){EB%=
  14435. spacer$)):
  14436.  PROCstore_string will overwrite character after
  14437.  spacer with a space. Use shortened spacer (sp$) & poke final character
  14438.  in afterwards.
  14439. )~*T%=Tab%(1):Tab%()=Tab%()-L%:Tab%(1)=T%
  14440. spacer$)
  14441.     L%-=1
  14442. selected(printW%,29) 
  14443.  N%-=2 
  14444.  N%-=1
  14445.  I%=1 
  14446.  SHrecptr%!(I%*4) 
  14447. A    
  14448.  -2,-3:
  14449.  No spacer added for header,footer & ruler lines
  14450.  J%=2 
  14451.  fields%
  14452. #      P%=(I%*LenLine%)+Tab%(J%)
  14453. !      
  14454. store_string(sp$,P%,
  14455.       TextPtr%?(P%+L%)=B%
  14456. print_record(REC%,address%)
  14457.  I%,F%,S%,N%,V%,Z%,F$,SF$,Tab%,n$,y$,pos%,length%,recdepth%,countpos%,last%,lf%,flag%,scrcol%,sp$,colprt%
  14458.  format$="label" 
  14459.   labcount%+=1:labfield%=1
  14460. selected(printerW%,41) 
  14461.  Label$(labcount%,0)=
  14462. key2(0,1)
  14463. "scroller_ptr%()=0:pending%()=
  14464. %countpos%=Count%:last%=
  14465. (Form$)-1
  14466. pos%=Tab%(1)
  14467.  I%=1 
  14468.  last% 
  14469.  I%<last% 
  14470.  sp$=spacer$ 
  14471.  sp$=""
  14472.   F%=
  14473. fnum(
  14474. Form$,I%,2))
  14475.   N%+=1
  14476. >    
  14477.  0:F$=
  14478. (REC%):
  14479.  format$<>"vert" 
  14480. (F$)," ")+F$
  14481. J    
  14482.  MaxFields%+1:Z%=
  14483. rec_no(F$,key%,address%):F$=
  14484. stripright(F$,"#")
  14485. D    
  14486.  MaxFields%+2:F$=
  14487. (file%):
  14488.  format$<>"vert" 
  14489. 6," ")+F$
  14490.      
  14491. selected(printW%,5) 
  14492. 7      F$=
  14493. expand(F$(F%),link$(F%),Len%,SF$,scrcol%)
  14494. %      
  14495.  F$=F$(F%):Len%=len%(F%)+2
  14496.         
  14497.     V%=chartype%(F%)
  14498. !    
  14499.  V%<>36 
  14500.  V%<>39 
  14501.  lf%=
  14502.       
  14503.  254,255:
  14504.       
  14505. `      
  14506. calc_error(F$,F%,ephemera$(C%,0),ephemera$(C%,1)):
  14507.  moan_err%,
  14508. msg("Err29")
  14509.       C%=F%-MaxFields%-3
  14510.       F$=
  14511. (ephemera$(C%,1))
  14512.       
  14513.       
  14514.  41,42,43,61,62:
  14515.       Z%=
  14516. no_yes(F%,F$)
  14517. 0      
  14518.  3,6,8,46,47,54,56,57,74,75,77,78,79:
  14519. "      
  14520. sums(F$,calcrow%?F%,V%)
  14521. 9      
  14522.  format$<>"vert" 
  14523. justify(F$,N%+1,N%,sp$)
  14524.       
  14525.  64,65,66,67:
  14526. !      S%=
  14527. scroller_number(F%)
  14528.        pending%(S%)=
  14529. :flag%=
  14530. Z      
  14531.  ScrollForm$="C" 
  14532.  colprt%=
  14533. read_scroller_row(REC%,F%,S%,V%-63,
  14534. ,cellsep$)
  14535.         
  14536. selected(printW%,6) 
  14537. u(F$)
  14538.  format$ 
  14539.  "horiz","table":
  14540.       
  14541.  64,65,66,67:
  14542.       
  14543.  ScrollForm$="R" 
  14544. /        
  14545. print_scroller_as_row(Tab%(N%),N%)
  14546.         
  14547. (        
  14548. store_string(F$,Tab%(N%),
  14549. 5        
  14550. (F$)>truelen%(F%) 
  14551.  truelen%(F%)=
  14552.         
  14553. adjust_width
  14554.       
  14555.       
  14556. &      
  14557. store_string(F$,Tab%(N%),
  14558. 3      
  14559. (F$)>truelen%(F%) 
  14560.  truelen%(F%)=
  14561.       
  14562. adjust_width
  14563.         
  14564.  "vert":
  14565. &    
  14566.  lf% 
  14567. end_line:pos%=Tab%(1)
  14568. %    
  14569. selected_esg(printW%,1) 
  14570. -      
  14571.  1:Head$=Tag$(F%):tail$=":"+
  14572. (160)
  14573. ?      
  14574.  2:Head$=$
  14575. text(mainW%,(desc%(F%))):tail$=":"+
  14576. (160)
  14577. $      
  14578.  36:Head$="":tail$=
  14579. (160)
  14580.         
  14581.  pos%=Tab%(1) 
  14582. /      Head$=
  14583. justify(Head$,2,1,tail$)+tail$
  14584. %      
  14585.  Head$=spacer$+Head$+tail$
  14586.         
  14587. 2    
  14588. store_string(Head$,pos%,
  14589. ):pos%+=
  14590. (Head$)
  14591. &      
  14592.  36,39:
  14593. print_memo(REC%,F%)
  14594.       
  14595.  64,65,66,67:
  14596.       
  14597. store_rec_num(REC%)
  14598.       
  14599.  ScrollForm$="R" 
  14600. *        
  14601. print_scroller_as_row(pos%,2)
  14602.         
  14603. .        
  14604.  flag% 
  14605. store_string(F$,pos%,
  14606. 5        
  14607. (F$)+pos%>Tab%(3) 
  14608.  Tab%(3)=
  14609. (F$)+pos%
  14610.       
  14611. K      
  14612.  pending%(S%) 
  14613. finish_scroller_printing(REC%,F%,S%,V%-63,pos%)
  14614.       
  14615.       
  14616. store_rec_num(REC%)
  14617. .      
  14618. store_string(F$,pos%,
  14619. ):pos%+=
  14620. #      
  14621.  reportdest$="Printer" 
  14622. .        w1%=
  14623. how_wide(F$,0,0,bodyfont%,-1)
  14624. (        
  14625.  concat% 
  14626.  w%+=w1% 
  14627.  w%=w1%
  14628. 0        
  14629.  w%>maxlenP%(2) 
  14630.  maxlenP%(2)=w%+32
  14631.       
  14632.         
  14633. %    
  14634.  concat% 
  14635.  I%+1=
  14636. (Form$) 
  14637. '      
  14638.  pos%>Tab%(3) 
  14639.  Tab%(3)=pos%
  14640.       
  14641. end_line
  14642.       pos%=Tab%(1)
  14643.       
  14644.       lf%=
  14645. H      
  14646.  reportdest$="Printer" 
  14647. store_string(
  14648. (160),pos%,
  14649. ):pos%+=1
  14650.         
  14651.  "label":
  14652. &    S$=Label$(labcount%,labfield%)
  14653. (    
  14654.  S$="" 
  14655.  S$=F$ 
  14656.  S$+=spacer$+F$
  14657.  F%=labsubfor% 
  14658. $      
  14659.  S$="" 
  14660.  S$=F$(labsubst%)
  14661.         
  14662. &    Label$(labcount%,labfield%)=S$
  14663. "    
  14664.  concat% 
  14665.  labfield%+=1
  14666.  format$ 
  14667.  "horiz","table":
  14668. store_rec_num(REC%)
  14669. end_line
  14670.  colprt% 
  14671. D    
  14672. (pending%())<>0 
  14673. print_rest_of_scrollers(REC%) 
  14674.  "vert":
  14675.  "label":
  14676.  labcount%=labpage% 
  14677. direct_print(0,Count%-1)
  14678. recdepth%=Count%-countpos%
  14679.  format$<>"label" 
  14680.  displayed%=-1 
  14681.  Printable%<(recdepth%-2*(page%>0)) 
  14682. *    !    
  14683.  reportdest$="Printer" 
  14684.       pagecolumn%+=1
  14685.       
  14686.  sorton%=0 
  14687. P        
  14688.  pagecolumn%=printcolumns% 
  14689. page_number:
  14690. direct_print(0,Count%-1)
  14691. F        
  14692.  pagecolumn%=printcolumns% 
  14693. page_number:pagecolumn%=0
  14694.       
  14695.       
  14696. page_number
  14697.         
  14698.     Printable%=pagelength%
  14699. ?    
  14700. selected(printW%,4) 
  14701. list_head 
  14702.  header_lines%=0
  14703. adjust_width
  14704.  reportdest$="Printer" 
  14705. '  w%=
  14706. how_wide(F$,0,0,bodyfont%,-1)
  14707.   w%+=spacerlen%
  14708.  w%>maxlenP%(N%) 
  14709.  maxlenP%(N%)=w%
  14710. print_scroller_as_row(pos%,N%)
  14711.  L%,P%
  14712. P%=TextPtr%+pos%
  14713.  pending%(S%)
  14714. *#F  F$=
  14715. read_scroller_row(REC%,F%,S%,V%-63,shrinkscroller%,cellsep$)
  14716. *$-  
  14717.  pending%(S%) 
  14718.  F$<>"" 
  14719.  F$+=rowterm$ 
  14720. store_string(F$,pos%,
  14721.   L%+=
  14722.   pos%+=
  14723.  L%>truelen%(F%) 
  14724.  truelen%(F%)=L%
  14725.  format$="vert" 
  14726.  pos%>Tab%(3) 
  14727.  Tab%(3)=pos%
  14728.  reportdest$="Printer" 
  14729. *,)  w%=
  14730. how_wide("",P%,L%,bodyfont%,-1)
  14731.   w%+=spacerlen%
  14732. *.)  
  14733.  w%>maxlenP%(N%) 
  14734.  maxlenP%(N%)=w%
  14735. page_number
  14736.  line$
  14737. pagenumber%+=1
  14738.  page%>0 
  14739.  Include page numbers
  14740. blank_lines(1)
  14741. store_rec_num(-2)
  14742. *96  
  14743. store_string("Page "+
  14744. (pagenumber%),Lmargin%,
  14745. print_memo(R%,F%)
  14746.  F,B%,F$,sp%,L%,LF%,rem$,pos%,Line$,brk%,w%,wh%
  14747.  "OS_Byte",229,1:
  14748.  "OS_Byte",124
  14749. pos%=Tab%(2)
  14750.  reportdest$="Printer" 
  14751.  wh%=
  14752. how_wide(Head$,0,0,headerfont%,-1)
  14753. blob_path(
  14754. ,$database%,R%,F%,36,F$)>=0 
  14755. *E%    Line$=rem$:L%=
  14756. (Line$):brk%=
  14757. *F        
  14758.       B%=
  14759.       Line$+=
  14760. (B%):L%+=1
  14761. *I#      
  14762.  reportdest$="Printer" 
  14763. *J0        w%=
  14764. how_wide(Line$,0,0,bodyfont%,-1)
  14765. *K*        
  14766.  wh%+w%>columnwidth% 
  14767.  brk%=
  14768.       
  14769.       
  14770.  B%=32 
  14771.  sp%=L%
  14772. *N+    
  14773.  B%=10 
  14774.  L%>TextLine% 
  14775.  brk% 
  14776. *P-      
  14777.  B%=10:rem$="":Line$=
  14778. Line$):LF%=
  14779.       
  14780. #F:rem$="":LF%=
  14781. *R8      
  14782. :rem$=
  14783. Line$,sp%+1):Line$=
  14784. Line$,sp%-1):LF%=
  14785. *S        
  14786. store_rec_num(REC%)
  14787. *U%    
  14788. store_string(Line$,pos%,LF%)
  14789. close_file(F)
  14790.  "OS_Byte",229,0
  14791. inmemo(F%,s$)
  14792.  len%,found%,line$,ptr%,case%
  14793. *^*len%=
  14794. load_blob($database%,REC%,F%,36)
  14795.  len%>0 
  14796. *`   case%=
  14797. selected(queryW%,1)
  14798.   ptr%=-1
  14799.     line$=""
  14800. *d        
  14801. *e(      ptr%+=1:line$+=
  14802. (SHmisc%?ptr%)
  14803. *f"    
  14804. (line$)>250 
  14805.  ptr%=len%
  14806. *g#    
  14807.  case% 
  14808.  line$=
  14809. u(line$)
  14810. *h*    
  14811.  s$<>"" 
  14812. line$,s$)>0 
  14813.  found%=
  14814.  ptr%=len%
  14815.  s$="" 
  14816.  found%=
  14817. =found%
  14818. wc(f$,t$)
  14819.  failed%,P%,Q%,F%,end%,c$,x$,s$
  14820.  P%+=1
  14821.   c$=
  14822. t$,P%,1)
  14823. *t(    
  14824.  "":end%=(Q%=F%):failed%=
  14825.  end%
  14826.  $wc%:
  14827.  P%+=1:Q%+=1
  14828.       c$=
  14829. t$,P%,1)
  14830.  c$<>$wc%
  14831.     P%-=1
  14832.  $ws%:
  14833.     R%=P%+1
  14834.  P%+=1
  14835.       c$=
  14836. t$,P%,1)
  14837. *~#    
  14838.  c$=$ws% 
  14839.  c$=$wc% 
  14840.  c$=""
  14841.       
  14842.  "":end%=
  14843. -      s$=
  14844. t$,R%):failed%=(
  14845. (s$))<>s$)
  14846.       
  14847.  $wc%,$ws%:
  14848. 7      s$=
  14849. t$,R%,P%-R%):Q%=
  14850. f$,s$,Q%):failed%=(Q%=0)
  14851. 9      Q%+=
  14852. (s$)-1:P%-=1:
  14853.  failed% 
  14854.  failed%=(Q%=F%)
  14855.         
  14856.     Q%+=1:x$=
  14857. f$,Q%,1)
  14858.     failed%=(c$<>x$)
  14859.  end% 
  14860.  failed%
  14861.  failed%
  14862. print_labels(x0%,y0%)
  14863.  row%,column%,label%,line%,S$
  14864.  label%=1 
  14865.  labpage%
  14866.  Label$(label%,1)<>"" 
  14867. #    column%=(label%-1) 
  14868.  labup%
  14869.      row%=(label%-1) 
  14870.  labup%
  14871.      x%=x0%+column%*labwidth%
  14872.     y%=y0%-row%*labdepth%
  14873. .    
  14874. print_label_line(fixed1$,headerfont%)
  14875.  line%=1 
  14876.  lablines%
  14877. ;      
  14878. print_label_line(Label$(label%,line%),bodyfont%)
  14879.  line%
  14880. .    
  14881. print_label_line(fixed2$,headerfont%)
  14882. 4    
  14883. print_label_line(Label$(label%,0),keyfont%)
  14884.  label%
  14885. print_label_line(S$,font%)
  14886.  S$<>"" 
  14887.  "ColourTrans_SetFontColours",font%,&ffffff00,0,14
  14888.  "Font_Paint",font%,S$,16,x%,y%
  14889.   y%-=linedepth%
  14890. read_print_options(dest$,wi%,wi2%)
  14891.  S$,extra%,header%,footer%,status%,flags%,ps%
  14892.  dest$="" 
  14893. selected_esg(wi%,4) 
  14894. !    
  14895.  22:reportdest$="Window"
  14896.  23:reportdest$="File"
  14897. "    
  14898.  25:reportdest$="Printer"
  14899. 0    
  14900. printer_driver(Z$) 
  14901.  moan_err%,Z$
  14902. .    
  14903.  "XParallel_Op",0 
  14904.  ,,status%;flags%
  14905.  (flags% 
  14906.  1)=0 
  14907. B      
  14908.  If error flag set hardware is too old to report status
  14909. E      
  14910.  DON'T report printer as 'not ready' - have to trust user!
  14911. J      
  14912.  IF ((status%>>3) AND 1)=0 THEN ERROR moan_err%,FNmsg("Err182")
  14913.  reportdest$="Window"
  14914. selected_esg(wi%,3) 
  14915.  15:format$="horiz"
  14916.  16:format$="vert"
  14917. selected_esg(wi%,6) 
  14918.  40:ScrollForm$="R":shrinkscroller%=
  14919. selected(wi%,43)
  14920.  41:ScrollForm$="C"
  14921. ,cellsep$=
  14922. convert_spacer($
  14923. text(wi%,50))
  14924. ,rowterm$=
  14925. convert_spacer($
  14926. text(wi%,51))
  14927.  usekey%=-1 
  14928.  S$=Index$(key%) 
  14929.  S$=Index$(usekey%)+" index"
  14930. Title1$="Ordered by "+S$
  14931. Title2$=$
  14932. text(wi%,10)
  14933. +spacer$=
  14934. convert_spacer($
  14935. text(wi%,26))
  14936. vplot%=0
  14937. spacer$,"|")>0 
  14938.  vplot%=5
  14939. spacer$,"
  14940. ")>0 
  14941.  vplot%=21
  14942.  vplot%>0 
  14943.  reportdest$ 
  14944.  "Window":vrules%=
  14945.  "File":vrules%=
  14946. >    
  14947.  "Printer":
  14948. (spacer$)<3 
  14949.  spacer$=
  14950. 3," "):vrules%=
  14951.  vrules%=
  14952. )Lmargin%=1:Tab%(0)=0:Tab%(1)=Lmargin%
  14953. Tmargin%=1
  14954. TextLine%=
  14955. text(wi%,18))
  14956.  pagelength%=
  14957. text(wi%,9))
  14958.  pagelength%=0 
  14959.  pagelength%=1000000
  14960. selected(wi%,28) 
  14961.  header%=6 
  14962.  header%=0
  14963. selected(wi%,29) 
  14964.  footer%=3 
  14965.  footer%=0
  14966. selected(wi%,35) 
  14967.  page%=1 
  14968.  page%=0
  14969. pagenumber%=0
  14970. +extra%=2*page%+Tmargin%+header%+footer%
  14971. shrink%=
  14972. selected(wi%,24)
  14973. &colour%=
  14974. get_icon_cols(printW%,53)
  14975. Cheaderwimpcol%=colour% 
  14976.  16:headercol%=wimpcol%(headerwimpcol%)
  14977. &colour%=
  14978. get_icon_cols(printW%,54)
  14979. =bodywimpcol%=colour% 
  14980.  16:bodycol%=wimpcol%(bodywimpcol%)
  14981. &colour%=
  14982. get_icon_cols(printW%,55)
  14983. =rulewimpcol%=colour% 
  14984.  16:rulecol%=wimpcol%(rulewimpcol%)
  14985.  reportdest$="Printer" 
  14986.   pause%=
  14987. selected(wi2%,87)
  14988.   shrink%=
  14989.   Lmargin%=0
  14990.   Tmargin%=0
  14991.   tabextrarows%=0
  14992. selected_esg(wi2%,7) 
  14993.  61:pointsize%=8
  14994.  62:pointsize%=10
  14995.  63:pointsize%=12
  14996.  64:pointsize%=14
  14997. '    
  14998. :pointsize%=
  14999. text(wi2%,65))
  15000. &    
  15001.  pointsize%=0 
  15002.  pointsize%=10
  15003. get_fonts
  15004. 6  spacerlen%=
  15005. how_wide(spacer$,0,0,headerfont%,-1)
  15006.  spacerlen%<6 
  15007.  spacerlen%=6
  15008. selected_esg(wi2%,1) 
  15009.     orientation$="upright"
  15010. $    Plmargin%=
  15011. convert_to_OS(14)
  15012. $    Prmargin%=
  15013. convert_to_OS(15)
  15014. $    Ptmargin%=
  15015. convert_to_OS(16)
  15016. $    Pbmargin%=
  15017. convert_to_OS(18)
  15018.     orientation$="sideways"
  15019. $    Plmargin%=
  15020. convert_to_OS(16)
  15021. $    Prmargin%=
  15022. convert_to_OS(18)
  15023. $    Ptmargin%=
  15024. convert_to_OS(15)
  15025. (    Pbmargin%=
  15026. convert_to_OS(14)    
  15027. selected_esg(wi2%,9) 
  15028.  80:printcolumns%=1
  15029.  81:printcolumns%=2
  15030.  85:printcolumns%=3
  15031.  86:printcolumns%=4
  15032.  printcolumns%=1 
  15033.  gutter%=0 
  15034.  gutter%=
  15035. convert_to_OS(82)
  15036.  "PDriver_Info" 
  15037.  ,,,n%
  15038. +    =  ps%=((n% 
  15039.  (1<<29)<>0)):
  15040.  Is this a PostScript printer?
  15041.  Output% 
  15042. &    
  15043.  1:printhandle%=
  15044. ("printer:")
  15045. ?    
  15046.  2:printhandle%=
  15047. ("<Wimp$ScrapDir>.Printers.PBreport")
  15048. inform("",193,0)
  15049.  "OS_Byte",229,0
  15050.  "PDriver_SelectJob",printhandle%,0 
  15051.  previousjob%
  15052.  ps% 
  15053. declare_fonts
  15054. get_document_size(left%,bottom%,right%,top%,paperx%,papery%)
  15055. selected(wi2%,68) 
  15056. +    
  15057.  Plmargin%>left% 
  15058.  left%=Plmargin%
  15059. /    
  15060.  Pbmargin%>bottom% 
  15061.  bottom%=Pbmargin%
  15062. =    
  15063.  Prmargin%>paperx%-right% 
  15064.  right%=paperx%-Prmargin%
  15065. 9    
  15066.  Ptmargin%>papery%-top% 
  15067.  top%=papery%-Ptmargin%
  15068. !  leading%=
  15069. text(wi2%,56))
  15070.  leading%<100 
  15071.  leading%=100
  15072. +  linedepth%=(pointsize%*leading%) 
  15073.  orientation$ 
  15074. =    
  15075.  "upright":pagelength%=(top%-bottom%-8) 
  15076.  linedepth%
  15077. O    columnwidth%=(right%-left%-(gutter%*(printcolumns%-1))) 
  15078.  printcolumns%
  15079. >    
  15080.  "sideways":pagelength%=(right%-left%-8) 
  15081.  linedepth%
  15082. + O    columnwidth%=(top%-bottom%-(gutter%*(printcolumns%-1))) 
  15083.  printcolumns%
  15084.   columnwidth%-=12
  15085. +#   copies%=
  15086. text(wi2%,45))
  15087. +$   
  15088. selected_esg(wi2%,2) 
  15089.  7:format$="table"
  15090. +&(    tablecolumns%=
  15091. text(wi2%,23))
  15092. +',    tablecolumnwidth%=
  15093. convert_to_OS(24)
  15094. +((    tabextrarows%=
  15095. text(wi2%,69))
  15096.  8:format$="label"
  15097. +*'    Title$="":Title1$="":Title2$=""
  15098. ++"    
  15099. selected_esg(wi2%,5) 
  15100.       
  15101.  28:labup%=1
  15102.       
  15103.  29:labup%=2
  15104.       
  15105.  30:labup%=3
  15106.       
  15107.  53:labup%=4
  15108. +0        
  15109. +1$    labwidth%=
  15110. convert_to_OS(32)
  15111. +2$    labdepth%=
  15112. convert_to_OS(34)
  15113. +3$    labrows%=papery% 
  15114.  labdepth%
  15115. +4     labpage%=labrows%*labup%
  15116. +5<    startlabel%=
  15117. text(wi2%,55))-1:$
  15118. text(wi2%,55)="1"
  15119.     labcount%=startlabel%
  15120. +7"    labsubst%=-1:labsubfor%=-1
  15121. selected(wi2%,39) 
  15122.       S$=$
  15123. text(wi2%,78)
  15124. +:.      
  15125.  S$<>"" 
  15126.  labsubst%=
  15127. field(X%,S$,
  15128.       S$=$
  15129. text(wi2%,40)
  15130. +</      
  15131.  S$<>"" 
  15132.  labsubfor%=
  15133. field(X%,S$,
  15134. +=        
  15135.     fixed1$=$
  15136. text(wi2%,51)
  15137.     fixed2$=$
  15138. text(wi2%,52)
  15139. convert_spacer(S$)
  15140.  S%,C$
  15141. (S$):C$=
  15142. +H"  
  15143.  S%=0:
  15144.  Use spacer$ "as is"
  15145. +I"  
  15146.  C$<"0" 
  15147.  C$>"9":S$=
  15148. S%,C$)
  15149. S%," ")
  15150. convert_to_OS(ic%)
  15151.  N,units$
  15152. units$=$
  15153. text(printerW%,33)
  15154.  get current units from label, NOT from selected radio button
  15155. text(printerW%,ic%))
  15156.  units$ 
  15157.  "mm":N=N*60*180/1524
  15158.  "in":N=N*180
  15159.  "pt":N=N*180/72
  15160. convert_units
  15161.  units$,P%,S$,factor,ic%,N
  15162.  PROC is only called when radio button clicked. Get NEW units from button
  15163. selected_esg(printerW%,8) 
  15164. +_6  
  15165.  48:units$="mm":factor=60*180/1524:@%=&01020109
  15166. +`.  
  15167.  38:units$="in":factor=180:@%=&01020209
  15168. +a1  
  15169.  77:units$="pt":factor=180/72:@%=&01020109
  15170.  14,15,16,18,24,32,34,82,-1
  15171.  ic%<>-1
  15172. convert_to_OS(ic%)
  15173.   N=N/factor
  15174. +i   $
  15175. text(printerW%,ic%)=
  15176. +j!  
  15177. redraw_icon(printerW%,ic%)
  15178. @%=&90A
  15179. label_units(units$)
  15180. label_units(U$)
  15181.  ic%,S$
  15182.  10,26,33,35,83,-1
  15183.  ic%<>-1
  15184.   S$=$
  15185. text(printerW%,ic%)
  15186. +z(  
  15187. S$)=")" 
  15188. S$,3)=U$+")" 
  15189.  S$=U$
  15190. text(printerW%,ic%)=S$
  15191. +|!  
  15192. redraw_icon(printerW%,ic%)
  15193. list_head
  15194.  exit%
  15195. "hspace%=0:fspace%=0:maxhead%=0
  15196. Printable%=pagelength%
  15197. blank_lines(Tmargin%)
  15198.  format$="label" 
  15199.  header_lines%=Count%:
  15200.  displayed%=-1 
  15201.  Title2$<>"" 
  15202. send_title(Title2$)
  15203. selected(printW%,11) 
  15204. send_title("Printed: "+
  15205. selected(printW%,28) 
  15206.  displayed%=-1 
  15207. send_title(Title$):
  15208. send_title(Title1$)
  15209.  format$ 
  15210.  "horiz":
  15211. (    
  15212. selected_esg(printW%,1)<>36 
  15213. N      
  15214.  "Wimp_TransferBlock",mytask%,SHheadptr%,mytask%,TextPtr%,LenLine%
  15215.       
  15216. store_rec_num(-1)
  15217.       
  15218. end_line
  15219.       
  15220.       hspace%-=90
  15221.       
  15222.  hspace%-=18
  15223.         
  15224.  "vert":
  15225.  "table":
  15226. (    
  15227. selected_esg(printW%,1)<>36 
  15228. N      
  15229.  "Wimp_TransferBlock",mytask%,SHheadptr%,mytask%,TextPtr%,LenLine%
  15230.       
  15231. store_rec_num(-1)
  15232.       
  15233. end_line
  15234.         
  15235.  Count%>Tmargin% 
  15236. rule:hspace%-=18
  15237.  header_lines%=0 
  15238.  header_lines%=Count%
  15239. hspace%+=header_lines%*36
  15240.  displayed%>=0 
  15241.   fspace%=0
  15242.  fspace%=36-
  15243. selected(printW%,29)*54+page%*72
  15244. pad_line(bytes%,char%)
  15245.  base%,ptr%,I%
  15246. /base%=pointer%:ptr%=base%+LenLine%-bytes%-1
  15247.  bytes%>0 
  15248.  I%=0 
  15249.  bytes%-2
  15250.     ptr%?I%=char%
  15251. ptr%?(bytes%-1)=32
  15252. ptr%?bytes%=10
  15253. total_list
  15254.  reportdest$="" 
  15255. selected(printW%,29) 
  15256. blank_lines(1):
  15257. L$="Total "+
  15258. (printed%)
  15259.  format$ 
  15260.  "horiz":
  15261. ctotals(numfirst%)
  15262. store_rec_num(-2)
  15263. store_string(L$,Lmargin%,
  15264.  "vert":
  15265. store_rec_num(-2)
  15266. store_string(L$,Lmargin%,
  15267.  "table":
  15268. ctotals(numfirst%)
  15269. store_rec_num(-2)
  15270. store_string(L$,Lmargin%,
  15271. send_title(T$)
  15272.  C$,L%,max%,Line$,sp%,brk%
  15273. max%=LenLine%-Lmargin%-2
  15274.  T$<>""
  15275.     C$=
  15276. T$,1):T$=
  15277. T$,2)
  15278.     Line$+=C$:L%+=1
  15279. #    
  15280. " ,;:.-=",C$)>0 
  15281.  sp%=L%
  15282.  L%=max% 
  15283.  brk%=
  15284. !    
  15285.  reportdest$="Printer" 
  15286. 0      w%=
  15287. how_wide(Line$,0,0,headerfont%,-1)
  15288. $      
  15289.  w%>columnwidth% 
  15290.  brk%=
  15291.         
  15292.  T$="" 
  15293.  brk%
  15294.  sp%=0 
  15295.  sp%=L%
  15296.  brk% 
  15297. Line$,sp%+1)+T$:Line$=
  15298. Line$,sp%):shrink%=
  15299. store_rec_num(-2)
  15300.  pagecolumn%=0 
  15301. store_string(Line$,Tab%(1),
  15302. end_line
  15303. (Line$)>maxhead% 
  15304.  maxhead%=
  15305. (Line$)
  15306.    Line$="":L%=0:brk%=
  15307. :sp%=0
  15308. store_string(S$,pos%,end%)
  15309. $(TextPtr%+pos%)=S$
  15310. TextPtr%?(pos%+
  15311. (S$))=32
  15312.  end% 
  15313. end_line
  15314. store_rec_num(R%)
  15315. 0SHrecptr%=
  15316. claim_page(recanchor%,Count%*4+4)
  15317. !(SHrecptr%+Count%*4)=R%
  15318. end_line
  15319. TextPtr%?(LenLine%-1)=10
  15320. Count%+=1:Printable%-=1
  15321. ;SHtextptr%=
  15322. claim_page(textanchor%,(Count%+1)*LenLine%)
  15323. TextPtr%+=LenLine%
  15324.  reportdest$<>"Printer" 
  15325.  I%=Lmargin% 
  15326.  LenLine%-3
  15327.     TextPtr%?I%=152
  15328. store_rec_num(-3)
  15329. end_line
  15330. blank_lines(lines%)
  15331.  lines%>0
  15332. store_rec_num(-2)
  15333. end_line
  15334.   lines%-=1
  15335. blank_columns(lines%,pos%,C$)
  15336.  lines%>0
  15337. store_string(C$,pos%,
  15338.   lines%-=1
  15339. screen_list
  15340. SHrecptr%=!recanchor%
  15341. !!block%=0:block%!4=-Count%*36
  15342. (block%!8=(LenLine%-1)*16:block%!12=0
  15343.  "Wimp_SetExtent",listW%,block%
  15344. !block%=listW%
  15345.  "Wimp_GetWindowState",,block%
  15346. ;x%=(block%!12+block%!4) 
  15347.  2:y%=(block%!16+block%!8) 
  15348. "block%!12=block%!4+LenLine%*16
  15349.  Count%<28 
  15350. "  block%!16=block%!8+Count%*36
  15351.   block%!16=block%!8+36*28
  15352.  "Wimp_CloseWindow",,block%
  15353. open_window(listW%)
  15354. Listed%=
  15355. lit(listM%,0,
  15356. selected(passW%,13))
  15357. lit(listM%,2,(format$="horiz" 
  15358.  format$="vert") 
  15359.  shrink%)
  15360. sort_textcol%=-1
  15361. $SortTextCol%="Sort   """""
  15362. lit(listM%,1,
  15363. show_menu(listM%,x%,y%)
  15364.  x%+214,y%-20
  15365. sort_list(N%,z%)
  15366.  A%,I%,P%,ind%,type%,L%
  15367.  N%=-1 
  15368. selected(queryW%,1) 
  15369.  type%=5 
  15370.  type%=4
  15371. ,.1SHtextptr%=!textanchor%:SHrecptr%=!recanchor%
  15372. ind%=SHtextptr%+Tab%(N%)
  15373. ,0?SHmisc%=
  15374. extend_named_sliding_block(tempanchor%,Count%*4+4)
  15375. ,1?SHmisc2%=
  15376. extend_named_sliding_block(balanchor%,Count%*4+4)
  15377.  sortfield%>0 
  15378.  L%=len%(sortfield%)
  15379.  I%=0 
  15380.  Count%-1
  15381.  SHrecptr%!(I%*4)<0 
  15382.     SHmisc2%!(I%*4)=ind%
  15383. ,6        
  15384. ,73    SHmisc2%!(I%*4)=0:SHmisc%!(A%*4)=ind%:A%+=1
  15385.  sortfield%>0 
  15386. ,9"      byte%=ind%?L%:ind%?L%=13
  15387. ,:)      $ind%=
  15388. transform_date(L%,$ind%)
  15389.       ind%?L%=byte%
  15390. ,<        
  15391.   ind%+=LenLine%  
  15392.  "OS_HeapSort",A%,SHmisc%,type%
  15393. ,AFSHsort%=
  15394. extend_named_sliding_block(sortanchor%,Count%*LenLine%+4)
  15395. ,BBSHtemprec%=
  15396. extend_named_sliding_block(flaganchor%,Count%*4+4)
  15397. dest%=SHsort%
  15398.  z%=-1 
  15399.  A%-=1 
  15400.  A%=0
  15401.  I%=0 
  15402.  Count%-1
  15403.   ind%=SHmisc2%!(I%*4)
  15404.  ind%=0 
  15405. ,H"    ind%=SHmisc%!(A%*4):A%+=z%
  15406.  sortfield%>0 
  15407. ,J"      byte%=ind%?L%:ind%?L%=13
  15408. ,K)      $ind%=
  15409. transform_date(L%,$ind%)
  15410.       ind%?L%=byte%
  15411. ,OJ  
  15412.  "Wimp_TransferBlock",mytask%,ind%-Tab%(N%),mytask%,dest%,LenLine%
  15413. ,P.  P%=(ind%-Tab%(N%)-SHtextptr%) 
  15414.  LenLine%
  15415. ,Q(  SHtemprec%!(I%*4)=SHrecptr%!(P%*4)
  15416.   dest%+=LenLine%
  15417.  "Wimp_TransferBlock",mytask%,SHsort%,mytask%,SHtextptr%,Count%*LenLine%
  15418.  "Wimp_TransferBlock",mytask%,SHtemprec%,mytask%,SHrecptr%,Count%*4
  15419. scrap_block(sortanchor%)
  15420. scrap_block(tempanchor%)
  15421. scrap_block(balanchor%)
  15422. scrap_block(flaganchor%)
  15423. redraw(listW%)
  15424. lose_list
  15425. close_window(listW%)
  15426. scrap_block(headanchor%):SHheadptr%=0
  15427. scrap_block(textanchor%):SHtextptr%=0
  15428. scrap_block(recanchor%):SHrecptr%=0
  15429. Listed%=
  15430. query
  15431.  qbe% 
  15432. parse
  15433.  search$,F$,G$,FT$,F%,X$,P%,Q%,I%,t$,op$
  15434.  F%=1 
  15435.  fields%
  15436.  chartype%(F%) 
  15437.  0,1,2,3,4,63:
  15438.     F$=$Rf%(F%)
  15439.  WHEN 41,42,43:
  15440. ,m1    
  15441.  IF $Rf%(F%)=" " THEN F$="Y" ELSE F$="N"
  15442.  F$=""
  15443.   G$=F$
  15444.  F$<>"" 
  15445. ,r>    X$=">=>=,<=<=,<>,}{,>=,<=,==,>>,<<,{{,=,<,>,{,~,":P%=0
  15446. (X$)>0 
  15447.  P%=0
  15448. ,t<      Q%=
  15449. X$,","):op$=
  15450. X$,Q%-1):X$=
  15451. X$,Q%+1):P%=
  15452. F$,op$)
  15453. ,u        
  15454.  P%=0 
  15455.  F$="="+F$
  15456. ,xC      
  15457.  G$<>"""" 
  15458.  $Rf%(F%+1)="""":search$+=Tag$(F%)+",":FT$=F$
  15459. ,yB      
  15460.  G$="""" 
  15461.  $Rf%(F%+1)<>"""":search$+=Tag$(F%)+FT$+" & "
  15462. ,z)      
  15463.  G$="""":search$+=Tag$(F%)+","
  15464. ,{&      
  15465. :search$+=Tag$(F%)+F$+" & "
  15466. ,|        
  15467. "$Query%=
  15468. search$,
  15469. (search$)-3)
  15470. parse
  15471. qbe(on%,disp%)
  15472.  on% 
  15473. &  valstatus%=
  15474. selected(prefsW%,21)
  15475. deselect(prefsW%,21):
  15476. val_on_off(
  15477. display(key%,-3)
  15478.  qbe% 
  15479. @    
  15480. set_icon(prefsW%,21,valstatus%):
  15481. val_on_off(valstatus%)
  15482. %    
  15483.  disp% 
  15484. display(key%,addr)
  15485. deselect(matchW%,2)
  15486. qbe%=on%
  15487. parse
  15488.  val%,valt%,vals%,C%,I%,P%,F%,f1%,f2%,t%,flag%,left%,right%,search$,field$,op$,bo$,target$,targ$,f$,t$,tt$,E$,E1$,TitFd$,TitTg$,simple%,date$,SF$,S$,case%,targets%,quoted%,ft%
  15489. S$=$Query%
  15490. u(S$)="ALL" 
  15491.  S$=""
  15492.  S$="" 
  15493.  query$="ALL" 
  15494.  query$=S$ 
  15495. case%=
  15496. selected(queryW%,1)
  15497. usekey%=-1:useval$=""
  15498. stripright(S$," ")
  15499. simple%=
  15500. simple(S$)
  15501.  S$<>"" 
  15502.  S$+=" "
  15503. Title$=""
  15504. (S$)>0
  15505.   W$=
  15506. word(S$," ")
  15507.  W$="NOT" 
  15508. S$,1)<>"(" 
  15509.  moan_err%,
  15510. msg("Err60")
  15511. strip_brackets
  15512. (W$)>0 
  15513.  W$="&" 
  15514.  W$="AND"
  15515. 5    flag%=
  15516. :TitFd$="":TitTg$="":op$="":targets%=0
  15517. 5      
  15518.  "AND","OR","NOT":E$=W$:Title$+=" "+E$+" "
  15519.       
  15520.       E$=""
  15521.       
  15522. split
  15523.       
  15524. (field$)>0
  15525. "        
  15526. field$,"TIME$")=0 
  15527. &          f$=
  15528. word(field$,","))
  15529.           
  15530. field$)
  15531.         
  15532.         f1%=0:f2%=0
  15533.         
  15534. 6          
  15535. f$,"TIME$")>0:TitFd$=f$+" ":field$=""
  15536. <          
  15537.  f$="@":f1%=1:f2%=fields%:TitFd$="Any field "
  15538.           
  15539. f$,"-")>0:
  15540.           P%=
  15541. f$,"-")
  15542. *          f1%=
  15543. field(val%,
  15544. f$,P%-1),
  15545. !          TitFd$=
  15546. TitFd$)+"-"
  15547. *          f2%=
  15548. field(val%,
  15549. f$,P%+1),
  15550. $          
  15551.  f1%>f2% 
  15552.  f1%,f2%
  15553.           
  15554. #          f1%=
  15555. field(val%,f$,
  15556. !          f$="F$("+
  15557. (f1%)+")"
  15558. *          
  15559.  case% 
  15560.  f$="FNu("+f$+")"
  15561. 5          
  15562.  val% 
  15563.  instring% 
  15564.  f$="VAL("+f$+")"
  15565. !          
  15566.  chartype%(f1%) 
  15567.              
  15568.  5,50,51,70,71:
  15569.             L%=len%(f1%)
  15570. 7            f$="FNtransform_date("+
  15571. (L%)+","+f$+")"
  15572.           
  15573.         
  15574.         targ$=target$
  15575.         
  15576. (targ$)>0
  15577.           quoted%=
  15578. :ft%=0
  15579. !          t$=
  15580. word(targ$,",")
  15581.           
  15582.  flag% 
  15583. 4            
  15584.  quoted% 
  15585.  ft%=
  15586. field(valt%,t$,
  15587. E            
  15588.  See whether target is a field rather than a literal
  15589.             
  15590.  ft% 
  15591. ]              
  15592. selected(printW%,37) 
  15593.  tt$=
  15594. expand(t$,link$(f1%),L%,SF$,C%) 
  15595.  tt$=t$
  15596. '              
  15597.  case% 
  15598. u(t$)
  15599.               
  15600. 1              desc$=$
  15601. text(mainW%,desc%(ft%))
  15602. 1              
  15603.  desc$="" 
  15604.  tt$=t$ 
  15605.  tt$=desc$
  15606.                tt$+="(Field)"
  15607. %              t$="F$("+
  15608. (ft%)+")"
  15609. .              
  15610.  case% 
  15611.  t$="FNu("+t$+")"
  15612.             
  15613. -            
  15614.  quoted% 
  15615.  tt$=""""+tt$+""""
  15616.             TitTg$+=tt$+","
  15617.             targets%+=1
  15618.           
  15619.           u$=t$
  15620. !          
  15621.  chartype%(f1%) 
  15622. >            
  15623.  41,42,43,61,62:
  15624.  ft%=0 
  15625. pos_neg(f1%,t$)
  15626. k            
  15627.  5,50,51,70,71:
  15628. check_date(f1%,t$,2,date$)=
  15629. transform_date(len%(f1%),date$):u$=t$
  15630.           
  15631. '          
  15632.  ft%=0 
  15633.  t$=""""+t$+""""
  15634. ?          
  15635.  (val% 
  15636.  valt%) 
  15637.  instring% 
  15638.  t$="VAL("+t$+")"
  15639.           
  15640.  f2%>0 
  15641.             
  15642.  val% 
  15643. T              E1$="FNvany("+
  15644. (f1%)+","+
  15645. (f2%)+","+t$+","""+op$+""","""+bo$+""")"
  15646. U              
  15647.  E1$="FNany("+
  15648. (f1%)+","+
  15649. (f2%)+","+t$+","""+op$+""","""+bo$+""")"
  15650.             
  15651. 6            
  15652.  E1$=
  15653. element(op$,f1%,chartype%(f1%))
  15654.           
  15655. E          
  15656. (E$)+
  15657. (E1$)>255 
  15658.  moan_err%,
  15659. msg("Err6") 
  15660.  E$+=E1$
  15661. E          
  15662. (E$)+
  15663. (bo$)>255 
  15664.  moan_err%,
  15665. msg("Err6") 
  15666.  E$+=bo$
  15667.         
  15668.         flag%=
  15669.       
  15670.       E$=
  15671. (E$)-
  15672. (bo$))
  15673.       
  15674. E$,bo$)>0 
  15675. B        
  15676. (E$)>253 
  15677.  moan_err%,
  15678. msg("Err6") 
  15679.  E$="("+E$+")"
  15680.       
  15681.         
  15682. add_brackets
  15683. (S$)>0 
  15684.  E$+=" "
  15685. (search$)+
  15686. (E$)>255 
  15687.      
  15688.  moan_err%,
  15689. msg("Err6")
  15690.  search$+=E$
  15691. build_title(targets%)
  15692. ,Title$=
  15693. leaf($database%),2)+". "+Title$
  15694.  usekey%>=0 
  15695.  kl%=KL%(usekey%):val$=
  15696. type(usekey%)
  15697.  MarkedRecs%>0 
  15698. selected(matchW%,3) 
  15699. selected(matchW%,8) 
  15700.  filter%=
  15701. ticked(markM%,0):
  15702.  search$="" 
  15703.      search$="base%?REC%=1"
  15704. 8     Title$=
  15705. leaf($database%),2)+". Marked records"
  15706.      
  15707. "     search$+="ORbase%?REC%=1"
  15708.      usekey%=-1:useval$=""
  15709. )     Title$+=" (plus marked records)"
  15710. ticked(markM%,1):
  15711.  search$="" 
  15712.      search$="base%?REC%=0"
  15713. -    :     Title$=
  15714. leaf($database%),2)+". Unmarked records"
  15715.      
  15716. #     search$+="ANDbase%?REC%=0"
  15717. .     Title$+=" (excluding marked records)"
  15718.  search$="" 
  15719.  search$="TRUE":Title$=
  15720. leaf($database%),2)+". All records"
  15721. =search$
  15722. pos_neg(F%,s$)
  15723. u(s$)
  15724.  chartype%(F%) 
  15725.  41,42,43:
  15726. C    
  15727.  "Y","YES","T","TRUE","SET","TICKED","
  15728. ","STAR","*":s$=" "
  15729. R    
  15730.  "N","NO","F","FALSE","X","CROSS","CLEAR","BLANK","NULL","UNTICKED":s$=""
  15731.  61,62:
  15732. 8    
  15733.  "Y","YES","T","TRUE","SET","TICKED","
  15734. ":s$=" "
  15735. 2    
  15736.  "N","NO","F","FALSE","X","CROSS":s$=
  15737. - ]    
  15738.  "CLEAR","BLANK","NULL","MAYBE","DONTKNOW","DONTCARE","WHAT","WHAT?","EH?","?":s$=""
  15739. simple(S$)
  15740.  flag%
  15741. -(-  
  15742. S$," OR ")>0 
  15743. S$,"NOT ")>0:flag%=
  15744. S$,"==")>0:flag%=
  15745. -*'  
  15746. S$,"=")>0 
  15747. S$,",")=0:flag%=
  15748. =flag%
  15749. word(
  15750.  S$,sep$)
  15751.  P%,Q%,W$
  15752.   P%+=1
  15753. -2   
  15754. S$,P%,1)="""" 
  15755. S$,P%,1)=sep$ 
  15756.  moan_err%,
  15757. msg("Err93")
  15758. S$,P%-1)
  15759. S$,P%+1)
  15760. W$,1)="""" 
  15761. W$)="""" 
  15762. W$,2)):quoted%=
  15763. element(op$,f%,char%)
  15764.  E$,fn$
  15765.  char% 
  15766.  36,39:
  15767.   fn$="FNinmemo("
  15768.  op$ 
  15769. -@+    
  15770.  "{":E$=fn$+
  15771. (f%)+","+t$+")=TRUE "
  15772. -A1    
  15773.  "}{":E$=fn$+
  15774. (f%)+","+t$+")=FALSE "    
  15775.  "=":
  15776. -CO    
  15777.  t$="""""" 
  15778.  E$=fn$+
  15779. (f%)+","+t$+")=TRUE " 
  15780.  moan_err%,
  15781. msg("Err40")
  15782.  "<>":
  15783. -EP    
  15784.  t$="""""" 
  15785.  E$=fn$+
  15786. (f%)+","+t$+")=FALSE " 
  15787.  moan_err%,
  15788. msg("Err40")
  15789.  64,65,66,67:
  15790. -HR  E$="FNinscroll("+
  15791. (f%)+","+Scrcol$+","+t$+","""+op$+""","+
  15792. (vals%)+")=TRUE "
  15793.  op$ 
  15794. -K)    
  15795.  "{":E$="INSTR("+f$+","+t$+")>0"
  15796. -L*    
  15797.  "}{":E$="INSTR("+f$+","+t$+")=0"
  15798.  "=":
  15799.     E$=f$+op$+t$
  15800. -O"    
  15801.  simple%=
  15802.  usekey%=-1 
  15803. -P!      foundkey%=
  15804. is_a_key(f%)
  15805.       
  15806.  foundkey%>0 
  15807. -R]        
  15808.  KL%(foundkey%)=len%(f%) 
  15809.  case%=case%(foundkey%) 
  15810.  usekey%=foundkey%:useval$=u$
  15811.       
  15812. -T        
  15813. -U,    
  15814.  "$":E$="FNwc("+f$+","+t$+")=TRUE "
  15815. -V-    
  15816. ":E$="FNwc("+f$+","+t$+")=FALSE "
  15817. :E$=f$+op$+t$
  15818. vany(from%,to%,t%,op$,bo$)
  15819.  F%,found%,v%,bo%
  15820. bo%=(bo$="OR")
  15821. F%=from%-1
  15822.   F%+=1:v%=
  15823. (F$(F%))
  15824.  op$ 
  15825.  "=":found%=(v%=t%)
  15826.  "<>":found%=(v%<>t%)
  15827.  "<":found%=(v%<t%)
  15828.  ">":found%=(v%>t%)
  15829.  "<=":found%=(v%<=t%)
  15830.  ">=":found%=(v%>=t%)
  15831.  (bo%=found%) 
  15832.  F%=to%
  15833. =found%
  15834. any(from%,to%,targ$,op$,bo$)
  15835.  F%,found%,f$,t$,bo%,case%
  15836. case%=
  15837. selected(queryW%,1)
  15838. bo%=(bo$="OR")
  15839. F%=from%-1
  15840.   F%+=1:f$=F$(F%)
  15841.  chartype%(F%) 
  15842. -u.    
  15843.  41,42,43,61,62:t$=
  15844. pos_neg(F%,targ$)
  15845. :t$=targ$
  15846.  case% 
  15847. u(f$)
  15848.  op$ 
  15849.  "{":
  15850.  chartype%(F%) 
  15851.       
  15852.  36,39:
  15853.       found%=
  15854. inmemo(F%,t$)
  15855.       
  15856. :found%=(
  15857. f$,t$)>0) 
  15858.         
  15859.  "}{":
  15860.  chartype%(F%) 
  15861.       
  15862.  36,39:
  15863. #      found%=(
  15864. inmemo(F%,t$))
  15865.       
  15866. :found%=(
  15867. f$,t$)=0)
  15868.         
  15869.  "=":found%=(f$=t$)
  15870.  "<>":found%=(f$<>t$)
  15871.  "<":found%=(f$<t$)
  15872.  ">":found%=(f$>t$)
  15873.  "<=":found%=(f$<=t$)
  15874.  ">=":found%=(f$>=t$)
  15875.  "$":found%=
  15876. wc(f$,t$)
  15877. !    
  15878. ":found%=
  15879. wc(f$,t$)
  15880.  (bo%=found%) 
  15881.  F%=to%
  15882. =found%
  15883. split
  15884.  X$,Q%,Q1%,Q2%,I%,t$
  15885. :X$=">=>=,<=<=,<>,}{,>=,<=,==,>>,<<,{{,=,<,>,{,~,":P%=0
  15886. %Q1%=
  15887. W$,""""):Q2%=
  15888. W$,"""",Q1%+1)
  15889. (X$)>0 
  15890.  P%=0
  15891. 8  Q%=
  15892. X$,","):op$=
  15893. X$,Q%-1):X$=
  15894. X$,Q%+1):P%=
  15895. W$,op$)
  15896.  Q1%>0 
  15897.  P%>Q1% 
  15898.  Q2%>P% 
  15899.  P%=0
  15900.  P%>0 
  15901.   field$=
  15902. W$,P%-1)
  15903.    target$=
  15904. W$,P%+
  15905. (op$))+","
  15906.   field$+=","
  15907.  op$="~" 
  15908.  op$="<>"
  15909.  op$ 
  15910.  "<>","}{":bo$="AND"
  15911. D    
  15912.  op$="<>" 
  15913. target$,$wc%)>0 
  15914. target$,$ws%)>0) 
  15915.  op$="
  15916.  "<=",">=":bo$="OR"
  15917. -    
  15918.  "<=<=",">=>=":op$=
  15919. op$,2):bo$="AND"
  15920. 3    
  15921.  "==","<<",">>","{{":op$=
  15922. op$,1):bo$="AND"
  15923. :bo$="OR"
  15924. C    
  15925.  op$="=" 
  15926. target$,$wc%)>0 
  15927. target$,$ws%)>0) 
  15928.  op$="$"
  15929.  moan_err%,
  15930. msg("Err40")
  15931. instring%=
  15932. "}{,{{,{",op$)>0
  15933. fnum(S$)
  15934. S$,1)="X" 
  15935.  concat%=
  15936. :=MaxFields%+3+
  15937. S$,1)="Y" 
  15938.  concat%=
  15939. :=MaxFields%+3+
  15940.  S$="KK" 
  15941.  concat%=
  15942. :=MaxFields%+1
  15943.  S$="SF" 
  15944.  concat%=
  15945. :=MaxFields%+2
  15946. ("&"+S$)
  15947. concat%=((N% 
  15948.  128)>0)
  15949. =(N% 
  15950.  127)
  15951. field(
  15952.  val%,f$,Z%)
  15953.  I%,F%,desc$,flag%
  15954. val%=
  15955. f$,1)="[" 
  15956. f$)="]" 
  15957. f$),2):val%=
  15958. f$))="#" 
  15959.  Scrcol$=
  15960. f$):f$=
  15961. f$)):flag%=
  15962.  I%<fields% 
  15963.  F%=0
  15964.   I%+=1
  15965. u(Tag$(I%))=
  15966. u(f$) 
  15967.  F%=I%
  15968.  F%>0 
  15969. $  desc$=$
  15970. text(mainW%,desc%(F%))
  15971.  desc$<>"" 
  15972.  TitFd$+=desc$ 
  15973.  TitFd$+=f$
  15974.  flag% 
  15975.  TitFd$+="(Column "+Scrcol$+")," 
  15976.  TitFd$+=","
  15977.  moan_err%,
  15978. msg("Err8,"+f$)
  15979.  chartype%(F%) 
  15980.  3,6,46,47,54,56,57,74,75,77,78,79:val%=
  15981.  64,65,66,67:
  15982.  flag% 
  15983.  Scrcol$="0"
  15984.    vals%=val%:
  15985.  val% 
  15986.  val%=
  15987. dfield(d$)
  15988.  I%,F%
  15989.  I%<fields% 
  15990.  F%=0
  15991.   I%+=1
  15992. text(mainW%,desc%(I%)))=
  15993. u(d$) 
  15994.  F%=I%
  15995. find_fields(S$,sep$,
  15996.  tabs$)
  15997.  f$,F$,C$,L$,P%,Q%,F%,length%,X%
  15998. %Q%=1:length%=0:tabs$="":TitFd$=""
  15999.   P%=
  16000. S$,sep$,Q%)
  16001.  P%>0 
  16002. S$,Q%,P%-Q%)
  16003.   F%=
  16004. field(X%,f$,
  16005.   length%+=len%(F%)+2
  16006. -  L$=
  16007. ~(len%(F%)+1):
  16008. (L$)=1 
  16009.  L$="0"+L$
  16010.   tabs$+=L$
  16011. %  F$=
  16012. ~(F%):
  16013. (F$)=1 
  16014.  F$="0"+F$
  16015.   C$+=F$
  16016.   Q%=P%+1
  16017. length%+=
  16018. (RA%))+1
  16019. ~(length%)
  16020. tabs$=L$+tabs$
  16021. strip_brackets
  16022. W$,1)="("
  16023.   left%+=1:W$=
  16024. W$,2)
  16025. W$)=")"
  16026.   right%+=1:W$=
  16027. add_brackets
  16028.  left%>0
  16029.   E$="("+E$:left%-=1
  16030.  right%>0
  16031.   E$+=")":right%-=1
  16032. build_title(T%)
  16033.  change%
  16034. #TitFd$=
  16035. TitFd$):TitTg$=
  16036. TitTg$)
  16037. TitFd$,"TIME$")=0 
  16038. TitFd$,",")>0 
  16039. TitFd$,"-")>0) 
  16040.  bo$ 
  16041. &    
  16042.  "OR":TitFd$="One of:"+TitFd$
  16043.  "AND":
  16044.  op$ 
  16045. ;      
  16046.  "<>":TitFd$="None of:"+TitFd$:op$="=":change%=
  16047. ;      
  16048.  "}{":TitFd$="None of:"+TitFd$:op$="{":change%=
  16049. #      
  16050. :TitFd$="All of:"+TitFd$
  16051.         
  16052.  T%>1 
  16053.  bo$ 
  16054. &    
  16055.  "OR":TitTg$="one of:"+TitTg$
  16056.  "AND":
  16057.  op$ 
  16058. 1      
  16059.  "<>":TitTg$="none of:"+TitTg$:op$="="
  16060. 1      
  16061.  "}{":TitTg$="none of:"+TitTg$:op$="{"
  16062. '      
  16063. ":TitTg$="any of:"+TitTg$
  16064. I      
  16065.  change% 
  16066.  TitTg$="any of:"+TitTg$ 
  16067.  TitTg$="all of:"+TitTg$
  16068.         
  16069.  op$ 
  16070.  "{":op$=" contains "
  16071.  "}{":op$=" does not contain "
  16072.  "$":op$=" has wild-card match with "
  16073. ":op$=" does not have wild-card match with ":
  16074. Title$+=TitFd$+op$+TitTg$
  16075. expand(string$,table$,
  16076.  ExpLen%,
  16077.  subst$,
  16078.  scrcol%)
  16079.  p$,s$,start%,F%,I%,ind%,row%,field%,subst%,exact%,pos%,epos%,exp%,P%,T%,Rows%,TabFields%,Rec%,offset%,heading%,colours$
  16080. subst$=string$
  16081.  table$="" 
  16082.  ExpLen%=0:=string$:
  16083.  ### Not linked ###
  16084. table$,",")
  16085.  P%>0 
  16086.   exp%=
  16087. table$,P%+1))
  16088.   table$=
  16089. table$,P%-1)
  16090.  exp%=1
  16091. .'*field%=
  16092. trailing_number(table$,exact%)
  16093. .(*subst%=
  16094. leading_number(scrcol%,table$)
  16095.  ### field% is the linked field, subst% (if >=0) is the one to substitute on entry ###
  16096. table_number(table$)
  16097.  T%<0 
  16098.  ExpLen%=0:=string$:
  16099.  ### Table not found ###
  16100. p$=printrel$(T%)
  16101. .-`NewTab%=(
  16102. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)="
  16103.  exp%>TabFields% 
  16104.  exp%=1
  16105.  TabFields%=0 
  16106.  ExpLen%=0:=string$:
  16107.  ### Nothing to expand to! ###
  16108. .0*extra%=-NewTab%*(Rows%*(TabFields%+1))
  16109.  subst%>=0 
  16110.  pos%=
  16111. table_field(subst%,tabfieldlen%()) 
  16112.  pos%=
  16113. table_field(field%,tabfieldlen%())
  16114.  p$<>"" 
  16115.   ExpLen%=0
  16116.  I%=1 
  16117. (p$) 
  16118.     F%=
  16119. p$,I%,3))
  16120. .6#    ExpLen%+=tabfieldlen%(F%)+2
  16121.   ExpLen%-=2
  16122. .9"  
  16123.  ExpLen%=tabfieldlen%(exp%)
  16124. .;6start%=SHtabptr%(T%)+offset%-Rec%:ind%=start%+pos%
  16125.   row%+=1:ind%+=Rec%
  16126.  row%>Rows% 
  16127.  $ind%=subst$
  16128.  row%>Rows% 
  16129.  subst$="":=string$:
  16130.  ## String not in table ###
  16131. .@;ind%=start%+row%*Rec%:
  16132.  subst%>=0 
  16133.  subst$=$(ind%+pos%)
  16134.  p$<>"" 
  16135.  I%=1 
  16136. (p$) 
  16137.     F%=
  16138. p$,I%,3))
  16139. .D,    pos%=
  16140. table_field(F%,tabfieldlen%())
  16141. .E4    s$+=
  16142. pad($(ind%+pos%),tabfieldlen%(F%))+"  "
  16143.   s$=
  16144. .I-  epos%=
  16145. table_field(exp%,tabfieldlen%())
  16146. .J5  ind%+=epos%:s$=$ind%:
  16147.  ### Return 2nd field ###
  16148. n(F%)
  16149.  T%,row%,ind%,start%,Rows%,Rec%,TabFields%,pos%,valpos%,N%,field%,subst%,table$,S$,exact%,scrcol%
  16150.  link$(F%)="" 
  16151. S$=$Rf%(F%)
  16152. table$=link$(F%)
  16153. .S*field%=
  16154. trailing_number(table$,exact%)
  16155. .T*subst%=
  16156. leading_number(scrcol%,table$)
  16157. .U/table%=
  16158. table_number(table$):
  16159.  table%<0 
  16160. .VYT$=
  16161. table_info(table%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  16162.  TabFields%=field% 
  16163. softerror("",54):=0
  16164.  subst%>0 
  16165. .Y.  pos%=
  16166. table_field(subst%,tabfieldlen%())
  16167. .Z0  
  16168.  pos%=
  16169. table_field(field%,tabfieldlen%())
  16170. .\1valpos%=
  16171. table_field(field%+1,tabfieldlen%())
  16172. .])start%=SHtabptr%(table%)+offset%-Rec%
  16173.  row%+=1
  16174. ._   ind%=start%+row%*Rec%+pos%
  16175.  row%>Rows% 
  16176.  S$=$ind%
  16177.  row%<=Rows% 
  16178. .b#  ind%=start%+row%*Rec%+valpos%
  16179.   N%=
  16180. ($ind%)
  16181.  N%=0
  16182. pad(s$,L%)
  16183. L%," "),L%)
  16184. padL(s$,L%)
  16185. L%," ")+s$,L%)
  16186. stripright(s$,c$)
  16187. s$)=c$
  16188.   s$=
  16189. trim(wi%,ic%)
  16190. selected(prefsW%,42) 
  16191. .v5 $
  16192. text(wi%,ic%)=
  16193. stripright($
  16194. text(wi%,ic%)," ")
  16195. redraw_icon(wi%,ic%)
  16196. include_fields
  16197.  Hdlen%,Datlen%,hlm%,dlm%,I%,F%,f$,Head$,limit%,pad%,col%,fail%,n$,y$,S$,SF$,pos%,width%,pending%,first%,tail%,tail$,last%,N%,S%,V%,w%,memo%,scroll%,scrcol%
  16198. nosort%=
  16199. numfirst%=
  16200. margin_check
  16201. pos%=Lmargin%
  16202. numeric%()=
  16203. #maxlen%(MaxFields%+1)=KL%(key%)
  16204. first%=
  16205. :last%=
  16206. (Form$)-1
  16207.  I%=1 
  16208.  last% 
  16209. &  F%=
  16210. fnum(
  16211. Form$,I%,2)):scroll%=
  16212.   N%+=1
  16213.   Tab%(N%)=pos%
  16214. selected(printW%,46) 
  16215.     F$=$
  16216. text(printW%,44)
  16217. I    
  16218.  F$=Tag$(F%) 
  16219. (F$)=N% 
  16220.  sorton%=N%:Title1$+=
  16221. msg("Err201,"+F$)
  16222.   V%=chartype%(F%)
  16223.  F%=0 
  16224.  F%=MaxFields%+2 
  16225.  V%=3:
  16226.  Justify record & subfile numbers
  16227. selected(printW%,5) 
  16228. 7    f$=
  16229. expand("@#*",link$(F%),Datlen%,SF$,scrcol%)
  16230.  Datlen%=maxlen%(F%)
  16231. 9    
  16232.  36,39:memo%=
  16233. set_format("vert"):maxlen%(F%)=0
  16234. 3    
  16235.  41,42,43,61,62:maxlen%(F%)=
  16236. no_yes(F%,F$)
  16237.  64,65,66,67:
  16238. =    S%=
  16239. scroller_number(F%):scroll%=
  16240. :scrcol%(S%)=scrcol%
  16241.  ScrollForm$ 
  16242. M      
  16243.  "R":maxlen%(F%)=
  16244. max_scroller_length(S%,F%,V%-63,scrcol%,Datlen%)
  16245. R      
  16246.  "C":maxlen%(F%)=
  16247. max_row_length(S%,F%,V%-63,scrcol%,Datlen%):nosort%=
  16248.         
  16249.     Datlen%=0
  16250.  Datlen%=0 
  16251.  Datlen%=maxlen%(F%) 
  16252.  maxlen%(F%)=Datlen%
  16253. selected_esg(printW%,1) 
  16254. 3    
  16255.  1:Head$=Tag$(F%):tail%=2:tail$=":"+
  16256. (160)
  16257. D    
  16258.  V%>250 
  16259.  Head$=Tag$(F%) 
  16260.  Head$=$
  16261. text(mainW%,(desc%(F%)))
  16262.      tail%=2:tail$=":"+
  16263. (160)
  16264. *    
  16265.  36:Head$="":tail%=1:tail$=
  16266. (160)
  16267.  F%=0 
  16268.  Head$="RECORD":Datlen%=6
  16269.  F%=MaxFields%+1 
  16270.  Head$="KEY":Datlen%=KL%(key%)
  16271.  F%=MaxFields%+2 
  16272.  Head$="SUBFILE":Datlen%=1
  16273.   Hdlen%=
  16274. (Head$)
  16275.  Hdlen%>hlm% 
  16276.  hlm%=Hdlen%
  16277.  Datlen%>dlm% 
  16278.  dlm%=Datlen%
  16279.  concat% 
  16280.  first%:
  16281. 5    width%=Datlen%+
  16282. (spacer$):pending%=
  16283. :first%=
  16284. +    
  16285.  reportdest$="Printer" 
  16286.  width%+=2
  16287.  concat% 
  16288.  (I%<last%):
  16289. :    width%+=Hdlen%+tail%+Datlen%+
  16290. (spacer$):pending%=
  16291. +    
  16292.  reportdest$="Printer" 
  16293.  width%+=2
  16294.  pending%:
  16295. $    width%+=Hdlen%+tail%+Datlen%
  16296. #    
  16297.  width%>dlm% 
  16298.  dlm%=width%
  16299.     pending%=
  16300. :first%=
  16301. %    
  16302.  Hdlen%>hlm% 
  16303.  hlm%=Hdlen%
  16304.  format$ 
  16305.  "horiz","table":
  16306. !    PrintFields%=
  16307. (Form$) 
  16308. -    pad%=Datlen%-Hdlen%:
  16309.  pad%<0 
  16310.  pad%=0
  16311. +    
  16312.  I%<last% 
  16313.  Ls%=
  16314. (spacer$) 
  16315.  Ls%=0
  16316. B    SHheadptr%=
  16317. claim_page(headanchor%,pos%+pad%+Hdlen%+Ls%+4)
  16318. 2      
  16319.  3,6,46,47,54,56,57,74,75,77,78,79,254:
  16320.       numeric%(N%)=
  16321. I      $(SHheadptr%+pos%+pad%)=Head$:?(SHheadptr%+pos%+pad%+Hdlen%)=32
  16322. A      
  16323. :$(SHheadptr%+pos%)=Head$:?(SHheadptr%+pos%+Hdlen%)=32
  16324.         
  16325. !    
  16326.  reportdest$="Printer" 
  16327. N      maxlenP%(N%)=
  16328. how_wide("",SHheadptr%+pos%,Hdlen%+Ls%,headerfont%,-1)
  16329.         
  16330.     pos%+=pad%+Hdlen%+Ls%
  16331.  "vert":
  16332.     PrintFields%=2
  16333. !    
  16334.  reportdest$="Printer" 
  16335. 6      w%=
  16336. how_wide(Head$+tail$,0,0,headerfont%,-1)
  16337. +      
  16338.  w%>maxlenP%(1) 
  16339.  maxlenP%(1)=w%
  16340. M    
  16341.  100,254,255:
  16342.  key,record number,or calculation included. Do nothing
  16343. 1    
  16344.  vtype$(V%)="L" 
  16345.  scrolldata%(S%,9)=N%
  16346.   truelen%(F%)=Hdlen%
  16347.  truelen%(F%)>maxlen%(F%) 
  16348.  maxlen%(F%)=truelen%(F%)
  16349. Tab%(N%+1)=pos%
  16350.  format$ 
  16351.  "horiz","table":LenLine%=pos%+2
  16352.  "vert":Tab%(1)=Lmargin%:Tab%(2)=hlm%+tail%+Tab%(1):Tab%(3)=0
  16353.  memo% 
  16354. )    
  16355.  TextLine%>dlm% 
  16356.  dlm%=TextLine%
  16357. M    
  16358.  TextLine%=0 
  16359.  TextLine%=dlm%:
  16360.  TextLine% will be 0 if 'A' specified
  16361. :    
  16362.  TextLine%>254 
  16363. softerror("",223):TextLine%=254
  16364.   LenLine%=Tab%(2)+dlm%+2
  16365.  "label":LenLine%=0
  16366. no_yes(F%,
  16367.  P%,Q%,V$,L%,no$,yes$,what$
  16368. val(mainW%,field%(F%))
  16369. V$,"Q")
  16370.  P%>0 
  16371. +  Q%=
  16372. V$,";S"):V$=
  16373. V$,P%+1,Q%-P%-1)+","
  16374. ,  P%=
  16375. V$,","):no$=
  16376. V$,P%-1):V$=
  16377. V$,P%+1)
  16378. -  P%=
  16379. V$,","):yes$=
  16380. V$,P%-1):V$=
  16381. V$,P%+1)
  16382.   P%=
  16383. V$,",")
  16384.  P%>0 
  16385.  what$=
  16386. V$,P%-1)
  16387.  no$="N":yes$="Y":what$="" 
  16388.  " ":F$=yes$
  16389. (0):F$=no$
  16390.  chartype%(F%) 
  16391.  41,42,43:F$=no$
  16392.  61,62:F$=what$
  16393. (no$)
  16394. (yes$)>L% 
  16395. (yes$)
  16396. set_format(S$)
  16397. deselect(printW%,
  16398. selected_esg(printW%,3))
  16399. deselect(printerW%,
  16400. selected_esg(printerW%,2))
  16401.  "horiz":
  16402. select(printW%,15)
  16403.  "vert":
  16404. select(printW%,16)
  16405.  "table":
  16406. select(printerW%,7)
  16407.  "label":
  16408. select(printerW%,8)
  16409. format$=S$
  16410. save_selection
  16411.  P%,T%,I%,F%,J%
  16412. -P%=savebuff%:$P%=printorder$:P%+=
  16413. ($P%)+1
  16414.  T%=0 
  16415.  LastTable%
  16416. # $P%=printrel$(T%):P%+=
  16417. ($P%)+1
  16418. $P%="***":P%+=
  16419. ($P%)+1
  16420.  I%=1 
  16421. (printorder$)-1 
  16422. "  F%=
  16423. fnum(
  16424. printorder$,I%,2))
  16425.  chartype%(F%) 
  16426. ,    
  16427.  3,6,46,47,54,56,57,74,75,77,78,79:
  16428.  J%=0 
  16429. N      
  16430. selected(numscrollW%,(calcrow%?F%)*8-6+J%) 
  16431.  $P%="ON" 
  16432.  $P%="OFF"
  16433.       P%+=
  16434. ($P%)+1
  16435.  Ecalc%>0 
  16436.  I%=0 
  16437.  Ecalc%-1
  16438.  J%=0 
  16439. +      $P%=ephemera$(I%,J%):P%+=
  16440. ($P%)+1
  16441. / 8Start%=savebuff%:End%=Start%+P%-savebuff%:Type%=&7F3
  16442. load_selection(f$)
  16443.  F%,I%,J%,T%,F,new%,p$
  16444. clear_selection
  16445. printorder$=
  16446. printorder$,3)="!!!" 
  16447.  !Pcol%=
  16448. printorder$,4)):printorder$=
  16449. T%=-1:printrel$()=""
  16450.  p$<>"***"
  16451.   T%+=1
  16452.   p$=
  16453.  p$<>"" 
  16454.  p$<>"***" 
  16455. select(printW%,5)
  16456.     printrel$(T%)=p$
  16457.  tableW%(T%)>0 
  16458. /1f      NewTab%=(
  16459. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)="
  16460. /20      extra%=-NewTab%*(Rows%*(TabFields%+1))
  16461.       
  16462.  I%=1 
  16463. (p$) 
  16464. /4$        tablefield%=
  16465. p$,I%,3))
  16466. /53        
  16467. select(tableW%(T%),tablefield%+extra%)
  16468.       
  16469. /7        
  16470. select_them(
  16471. Ecalc%=0
  16472.   F%=MaxFields%+3+Ecalc%
  16473.  J%=0 
  16474.     S$=
  16475.     ephemera$(Ecalc%,J%)=S$
  16476.  J%=2 
  16477.  Tag$(F%)=S$
  16478. /B1    
  16479.  J%=3 
  16480.  len%(F%)=
  16481. (S$):maxlen%(F%)=
  16482. /C$    
  16483.  J%=4 
  16484.  chartype%(F%)=
  16485.   Ecalc%+=1
  16486. close_file(F)
  16487. lit(printM%,7,
  16488. lit(printM%,8,
  16489. lit(printM%,9,
  16490. lit(mainM%,7,
  16491. selected(passW%,13))
  16492. select_them(calc%)
  16493.  F%,I%,J%,S%,col%
  16494.  I%=1 
  16495. (printorder$)-1 
  16496. /Q"  F%=
  16497. fnum(
  16498. printorder$,I%,2))
  16499. select(matchW%,4)
  16500. /T)    
  16501.  MaxFields%+1:
  16502. select(matchW%,6)
  16503. /U*    
  16504.  MaxFields%+2:
  16505. select(matchW%,12)
  16506.  chartype%(F%) 
  16507.       
  16508.  36,60:
  16509. /Y0      col%=
  16510. get_icon_cols(mainW%,field%(F%))
  16511. /Z2      col%=((col%>>4) 
  16512.  (col%<<4)) 
  16513.  %11111111
  16514. /[7      
  16515. set_icon_cols(mainW%,field%(F%),col%)       
  16516.       
  16517.  41,42,43,61,62:
  16518. /]0      col%=
  16519. get_icon_cols(mainW%,field%(F%))
  16520. /^2      col%=((col%>>4) 
  16521.  (col%<<4)) 
  16522.  %11111111
  16523. /_0      
  16524. set_icon_cols(mainW%,field%(F%),col%)
  16525. /`.      
  16526.  3,6,46,47,54,56,57,74,75,77,78,79:
  16527. /a$      
  16528. select(mainW%,field%(F%))
  16529. /b$      
  16530. enable_row(calcrow%?F%,
  16531.       
  16532.  calc% 
  16533.         
  16534.  J%=0 
  16535. /eN          
  16536. set_icon(numscrollW%,(calcrow%?F%)*8-6+J%,(
  16537. #F="ON"))
  16538.         
  16539.       
  16540.       
  16541.  64,65,66,67:
  16542. /i$      
  16543. select(mainW%,field%(F%))
  16544. /j!      S%=
  16545. scroller_number(F%)
  16546. /k&      
  16547.  J%=0 
  16548.  scrolldata%(S%,6)-1
  16549. /l&        
  16550. invert(scrollerW%(S%),J%)
  16551.       
  16552. /n9      
  16553.  F%<=MaxFields% 
  16554. select(mainW%,field%(F%))
  16555. /o        
  16556. select_range(first%,last%,show%)
  16557.  F%,T%,F$,wi%,ic%,icon%,handle%
  16558.  first%>last% 
  16559.  first%,last%
  16560.  first%=1 
  16561.  last%=fields% 
  16562.  printorder$="" 
  16563.  printorder$=
  16564. printorder$))
  16565. wi%=mainW%
  16566.  F%=first% 
  16567.  last%
  16568.   ic%=field%(F%)
  16569.  chartype%(F%) 
  16570.  41,42,43,61,62:
  16571. /}$    col%=
  16572. get_icon_cols(wi%,ic%)
  16573. /~F    
  16574.  (col% 
  16575.  %1111)>=2 
  16576.  col%=((col%>>4) 
  16577.  (col%<<4)) 
  16578.  %11111111
  16579. .    
  16580.  show% 
  16581. set_icon_cols(wi%,ic%,col%)
  16582. '    F$=
  16583. ~(F%):
  16584. (F$)=1 
  16585.  F$="0"+F$
  16586.     printorder$+=F$
  16587. K    
  16588.  0,1,2,4,5,7,8,39,48,49,50,51,52,53,55,58,63,68,69,70,71,72,73,76:
  16589. =    
  16590.  len%(F%)>0 
  16591. get_icon_cols(wi%,ic%)<>winback%*17 
  16592. )      F$=
  16593. ~(F%):
  16594. (F$)=1 
  16595.  F$="0"+F$
  16596.       printorder$+=F$
  16597. $      
  16598.  show% 
  16599. select(wi%,ic%)
  16600.         
  16601. ,    
  16602.  3,6,46,47,54,56,57,74,75,77,78,79:
  16603. =    
  16604.  len%(F%)>0 
  16605. get_icon_cols(wi%,ic%)<>winback%*17 
  16606. )      F$=
  16607. ~(F%):
  16608. (F$)=1 
  16609.  F$="0"+F$
  16610.       printorder$+=F$
  16611. $      
  16612.  show% 
  16613. select(wi%,ic%)
  16614. $      
  16615. enable_row(calcrow%?F%,
  16616.         
  16617.  36,60:
  16618. '    F$=
  16619. ~(F%):
  16620. (F$)=1 
  16621.  F$="0"+F$
  16622.     printorder$+=F$
  16623. $    col%=
  16624. get_icon_cols(wi%,ic%)
  16625. 0    col%=((col%>>4) 
  16626.  (col%<<4)) 
  16627.  %11111111
  16628. .    
  16629.  show% 
  16630. set_icon_cols(wi%,ic%,col%)
  16631.  64,65,66,67:
  16632. select(wi%,ic%)
  16633.     S%=
  16634. scroller_number(F%)
  16635.     handle%=scrollerW%(S%)
  16636. '    
  16637.  icon%=0 
  16638.  scrolldata%(S%,6)-1
  16639.        
  16640. select(handle%,icon%)
  16641.  icon%
  16642. '    F$=
  16643. ~(F%):
  16644. (F$)=1 
  16645.  F$="0"+F$
  16646.     printorder$+=F$
  16647. lit(printM%,7,
  16648. lit(printM%,8,
  16649. lit(mainM%,7,
  16650. selected(passW%,13))
  16651. shade(matchW%,7,printorder$<>"")
  16652. lit(printM%,9,printorder$<>"")
  16653. clear_selection
  16654.  F%,T%,new%,wi%,ic%
  16655.  F%=1 
  16656.  fields%
  16657.  chartype%(F%) 
  16658. (    
  16659.  Filter button: do nothing
  16660.  36,41,42,43,60,61,62:
  16661. .    col%=
  16662. get_icon_cols(mainW%,field%(F%))
  16663. E    
  16664.  (col% 
  16665.  %1111)<2 
  16666.  col%=((col%>>4) 
  16667.  (col%<<4)) 
  16668.  %11111111
  16669. .    
  16670. set_icon_cols(mainW%,field%(F%),col%)
  16671. ,    
  16672.  3,6,46,47,54,56,57,74,75,77,78,79:
  16673. ?    
  16674. enable_row(calcrow%?F%,
  16675. deselect(mainW%,field%(F%))
  16676.  64,65,66,67:
  16677. $    
  16678. deselect(mainW%,field%(F%))
  16679.     S%=
  16680. scroller_number(F%)
  16681.     wi%=scrollerW%(S%)
  16682. %    
  16683.  ic%=0 
  16684.  scrolldata%(S%,6)-1
  16685.       
  16686. deselect(wi%,ic%)
  16687. &    
  16688. deselect(mainW%,field%(F%))
  16689. printorder$=""
  16690.     T%=-1
  16691.  T%<LastTable%
  16692.   T%+=1
  16693. b  NewTab%=(
  16694. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)="
  16695. ,  extra%=-NewTab%*(Rows%*(TabFields%+1))
  16696.   p$=printrel$(T%)
  16697.  p$<>"" 
  16698.  tableW%(T%)>0 
  16699.       
  16700.  I%=1 
  16701. (p$) 
  16702. $        tablefield%=
  16703. p$,I%,3))
  16704. 5        
  16705. deselect(tableW%(T%),tablefield%+extra%)
  16706.       
  16707.         
  16708. printrel$()=""
  16709. ephemera$()="":Ecalc%=0
  16710. lit(printM%,7,
  16711. lit(printM%,8,
  16712. lit(printM%,9,
  16713. lit(mainM%,7,
  16714. shade(matchW%,7,
  16715. deselect(matchW%,4):
  16716. deselect(matchW%,6):
  16717. deselect(matchW%,12)
  16718. load_query(f$,wi%,ic%)
  16719.  wi% 
  16720.  mainW%:
  16721.  ic% 
  16722. F    
  16723.  field%(buttonfield%(0,22)):
  16724. select(wi%,ic%):
  16725. filter(wi%,4,
  16726. .    
  16727. selected(passW%,14) 
  16728. match(0,0)
  16729.  keypadW%:
  16730. select(wi%,22):
  16731. filter(wi%,4,
  16732. 7    
  16733.  File double-click; not dropped on window
  16734. 6  !block%=queryW%:
  16735.  "Wimp_GetWindowState",,block%
  16736.  ((block%!32) 
  16737.  (1<<16))=0 
  16738. match(0,0)
  16739.  "OS_File",255,f$,Query%
  16740. query$=$Query%
  16741. set_caret(0,queryW%,0)
  16742. redraw_icon(queryW%,0)
  16743. design_field(b%,ic%,menu%)
  16744.  w%,h%,bg%,wht%,F%
  16745. close_window(createW%)
  16746.  fields%>0 
  16747. $  fieldsM%=
  16748. field_menu(items%,0)
  16749. 9  ptr%=designM%+52:ptr%!4=fieldsM%:
  16750. lit(designM%,1,
  16751. lit(designM%,1,
  16752.  $Reformatted%<>"" 
  16753. lit(designM%,7,
  16754. lit(designM%,2,
  16755. lit(designM%,3,
  16756. lit(designM%,4,
  16757. lit(designM%,5,
  16758.  adjust%:
  16759.   live%()=19,20,-1
  16760.   F%=
  16761. get_field(ic%)
  16762.  chartype%(F%) 
  16763. 2    
  16764.  64,65,66,67:
  16765. enable(createW%,
  16766. ):wht%=730
  16767. &    
  16768. enable(createW%,
  16769. ):wht%=640
  16770. P  live%()=11,18,21,22,23,24,35,47,6,26,30,39,40,48,54,-1:
  16771. enable(createW%,
  16772. '  live%()=29,-1:
  16773. enable(createW%,
  16774. B  live%()=30,-1:
  16775. enable(createW%,(len%(F%)=0 
  16776.  dbtype$="new"))
  16777. A  live%()=55,-1:
  16778. enable(createW%,(vtype$(chartype%(F%))="E"))
  16779. set_icon(createW%,55,(mandatory%?F%=1))
  16780. set_icon(createW%,63,(displayit%?F%=1)) 
  16781.  dbtype$="new" 
  16782. 8    live%()=22,23,48,54,21,35,-1:
  16783. enable(createW%,
  16784. -    live%()=18,-1:
  16785. enable(createW%,ic%<0)
  16786. .    live%()=29,-1:
  16787. enable(createW%,ic%>=0)
  16788.  ic%>=0:
  16789. *  live%()=11,18,-1:
  16790. enable(createW%,
  16791. M  live%()=21,22,23,24,35,47,48,6,26,29,30,39,40,54,-1:
  16792. enable(createW%,
  16793. 0  live%()=29,30,39,40,-1:
  16794. enable(createW%,
  16795. G  live%()=21,22,23,24,35,47,48,6,26,11,18,54,-1:
  16796. enable(createW%,
  16797. !posx%=x%:posy%=y%:dragbutt%=0
  16798. 3!block%=mainW%:
  16799.  "Wimp_GetWindowState",,block%
  16800. x%+=block%!20-block%!4
  16801. y%+=block%!24-block%!16
  16802. 5!block%=createW%:
  16803.  "Wimp_GetWindowState",,block%
  16804. %closed%=((block%!32 
  16805.  (1<<16))=0)
  16806.  %1111111 
  16807.  1,1024:
  16808.  fields%=0 
  16809. softerror("",62)
  16810.  ic%>=0 
  16811. (    fieldfunc$="create":$InsText%=""
  16812. 5    
  16813. deselect(createW%,
  16814. selected_esg(createW%,1))
  16815. set_up_edit
  16816. close_window(createW%)
  16817. 1    
  16818. position_window(createW%,0,0,0,wht%,0,0)
  16819. 0      
  16820. set_caret(0,createW%,4)
  16821. 0!      
  16822.  closed% 
  16823. 0$C    
  16824.  (ic% 
  16825.  2)=1 
  16826.  drag%=6:dragbutt%=16 
  16827.  drag%=5:dragbutt%=64
  16828. 0%$    
  16829. init_drag(mainW%,ic%,drag%)
  16830. 0(%  
  16831. shade(createW%,44,(fields%>0))
  16832. 0)&  fieldfunc$="create":$InsText%=""
  16833. 0*3  
  16834. deselect(createW%,
  16835. selected_esg(createW%,1))
  16836. 0+#  
  16837. shade(createW%,49,snapgrid%)
  16838. 0,-  
  16839.  ic%<0 
  16840. set_up_create 
  16841. set_up_edit
  16842. close_window(createW%)
  16843.  menu% 
  16844. 0/+    
  16845. show_menu(designM%,posx%-64,posy%)
  16846. 00L    
  16847. position_window(createW%,0,0,0,wht%,0,0):
  16848. set_caret(0,createW%,4)
  16849. 02<  
  16850.  closed% 
  16851. init_drag(mainW%,ic%,5):dragbutt%=64
  16852. enable(wi%,on%)
  16853. shade(wi%,live%(I%),on%)
  16854.   I%+=1
  16855.  live%(I%)=-1
  16856. set_up_edit
  16857.  adjust% 
  16858.  live%()=21,54,24,22,47,35,23,48,-1:
  16859. enable(createW%,
  16860. lit(designM%,0,
  16861. 0A.Fieldnumber%=
  16862. get_field(ic%):oldfield%=ic%
  16863. 0B!type%=chartype%(Fieldnumber%)
  16864.  (ic% 
  16865.  2)=0 
  16866.  Tag$(Fieldnumber%)<>"" 
  16867.  ic%+=1
  16868. 0D>!block%=mainW%:block%!4=ic%:
  16869.  "Wimp_GetIconState",,block%
  16870. 0EIx%=block%!8:y%=block%!12:w%=block%!16-block%!8:h%=block%!20-block%!12
  16871.  (oldfield% 
  16872.  2)=0 
  16873.  Tag$(Fieldnumber%)="" 
  16874.  x%+=w%:w%=0:h%=0
  16875. 0G7$boxX%=
  16876. (x%):$boxY%=
  16877. (y%):$boxW%=
  16878. (w%):$boxH%=
  16879. 0H'wht%=640:
  16880. set_scroll_def(0,0,
  16881.  vtype$(type%) 
  16882. 0JE  
  16883.  "E":
  16884. shade(createW%,21,
  16885. select(createW%,21):
  16886. set_limits(0)
  16887. 0KE  
  16888.  "C":
  16889. shade(createW%,47,
  16890. select(createW%,47):
  16891. set_limits(1)
  16892. 0LE  
  16893.  "T":
  16894. shade(createW%,24,
  16895. select(createW%,24):
  16896. set_limits(2)
  16897. 0ME  
  16898.  "X":
  16899. shade(createW%,22,
  16900. select(createW%,22):
  16901. set_limits(3)
  16902. 0NE  
  16903.  "K":
  16904. shade(createW%,23,
  16905. select(createW%,23):
  16906. set_limits(4)
  16907. 0OE  
  16908.  "O":
  16909. shade(createW%,48,
  16910. select(createW%,48):
  16911. set_limits(5)
  16912. 0PE  
  16913.  "S":
  16914. shade(createW%,35,
  16915. select(createW%,35):
  16916. set_limits(6)
  16917. 0QR  
  16918.  "L":wht%=730:
  16919. set_scroll_def(Fieldnumber%,type%-63,adjust% 
  16920.  (ic%>0),
  16921. 0R?  
  16922. shade(createW%,54,
  16923. select(createW%,54):
  16924. set_limits(7)
  16925.  I%=0 
  16926. lit(ftypeM%(6),I%,
  16927. 0V$  
  16928.  I%<8 
  16929. lit(ftypeM%(0),I%,
  16930. 0W$  
  16931.  I%=5 
  16932. lit(ftypeM%(3),I%,
  16933. 0Y$fieldtype%=type%:currenttype%=-1
  16934.   currenttype%+=1
  16935.  ?(flist%(menunumber%)+currenttype%+1)=fieldtype% 
  16936.  currenttype%>lasttype%
  16937.  currenttype%>lasttype% 
  16938. softerror(
  16939. (fieldtype%),221):
  16940. tick_one(ftypeM%(menunumber%),0,lasttype%-1,currenttype%)
  16941. 0_0$FtitleText%="Modify field "+
  16942. (Fieldnumber%)
  16943. 0`1$DescText%=$
  16944. text(mainW%,desc%(Fieldnumber%))
  16945. 0a $TagText%=Tag$(Fieldnumber%)
  16946. 0b#$LenText%=
  16947. (len%(Fieldnumber%))
  16948. 0c $ValText%=vname$(fieldtype%)
  16949. deselect(createW%,
  16950. selected_esg(createW%,2))
  16951.  fix%(Fieldnumber%) 
  16952. 0f+  
  16953. select(createW%,45):$Fixpt%="0"
  16954. 0g*  
  16955. select(createW%,46):$Fixpt%="0"
  16956. 0h:  
  16957. select(createW%,14):$Fixpt%=
  16958. (fix%(Fieldnumber%))
  16959. 0j&num%=(fieldtype%=3 
  16960.  fieldtype%=6)
  16961. shade(createW%,13,(
  16962. selected(createW%,14)))
  16963. shade(createW%,14,num%)
  16964. shade(createW%,45,num%)
  16965. shade(createW%,46,num%)
  16966. shade(createW%,6,
  16967. shade(createW%,63,
  16968.  fieldtype% 
  16969. 0q?  
  16970.  0,1,2,3,4,5,6,7,8,46,47,63:
  16971. shade(createW%,6,
  16972.  adjust%)
  16973. 0r)  
  16974.  36,37,38,60:
  16975. shade(createW%,63,
  16976. shade(createW%,15,(fieldtype%=3 
  16977.  fieldtype%=47))
  16978. shade(createW%,25,(fieldtype%=3))
  16979. 0v&C$=calc$(Fieldnumber%):P%=
  16980. C$,"|")
  16981.  P%>0 
  16982. 0x-  $mintext%=
  16983. C$,P%-1):$maxtext%=
  16984. C$,P%+1)
  16985. 0y!  
  16986.  $mintext%="":$maxtext%=""
  16987. $DesAction%="Edit field..."
  16988. set_up_create
  16989. select(createW%,21):
  16990. set_limits(0)
  16991. lit(designM%,0,
  16992.  adjust%)
  16993.  adjust% 
  16994.  dbtype$="new" 
  16995. lit(designM%,0,
  16996. lit(ftypeM%(3),5,
  16997.  I%=0 
  16998. lit(ftypeM%(6),I%,
  16999. -    
  17000.  I%<8 
  17001.  I%>0 
  17002. lit(ftypeM%(0),I%,
  17003. lit(ftypeM%(3),5,
  17004.  I%=0 
  17005. lit(ftypeM%(6),I%,
  17006. -    
  17007.  I%<8 
  17008.  I%>0 
  17009. lit(ftypeM%(0),I%,
  17010. 3$boxX%=
  17011. (x%):$boxY%=
  17012. (y%):$boxW%="0":$boxH%="0"
  17013. *$FtitleText%="New field "+
  17014. (fields%+1)
  17015. +$DescText%="":$TagText%="":$LenText%=""
  17016. )$Fixpt%="2":$mintext%="":$maxtext%=""
  17017. deselect(createW%,
  17018. selected_esg(createW%,2))
  17019. select(createW%,46)
  17020. !$DesAction%="Create field..."
  17021. empty_list
  17022.  L%,S$
  17023. %S$="No matching records":L%=
  17024. store_rec_num(-2)
  17025. store_string(S$,Lmargin%,
  17026.  L%>maxhead% 
  17027.  maxhead%=L%
  17028. #vrules%=
  17029. :spacer$=" ":nosort%=
  17030. remove_field(Field%,con%)
  17031.  F%,scrap%
  17032.  con% 
  17033. confirm(
  17034. msg("Err53"))=
  17035. )!block%=mainW%:block%!4=desc%(Field%)
  17036.  "Wimp_GetIconState",,block%
  17037. "posx%=block%!8:posy%=block%!12
  17038.  "Wimp_DeleteIcon",,block%
  17039. block%!4=field%(Field%)
  17040.  "Wimp_DeleteIcon",,block%
  17041.  Create two spurious fields to prevent nudge & adjust changing icon number!
  17042. ;scrap%=
  17043. create_icon(0,mainW%,0,0,0,0,&701A731,"",0,0,0)
  17044. ;scrap%=
  17045. create_icon(0,mainW%,0,0,0,0,&701A731,"",0,0,0)
  17046. fields%-=1
  17047. Calc$=calc$(Field%)
  17048.  F%=Field% 
  17049.  fields%
  17050.   desc%(F%)=desc%(F%+1):field%(F%)=field%(F%+1):Tag$(F%)=Tag$(F%+1):len%(F%)=len%(F%+1):chartype%(F%)=chartype%(F%+1):fix%(F%)=fix%(F%+1):calc$(F%)=calc$(F%+1)
  17051. calc$(fields%+1)=""
  17052. !block%=mainW%
  17053.  "Wimp_GetWindowState",,block%
  17054. ;posx%-=block%!20-block%!4:posy%-=block%!24-block%!16-48
  17055.  "Wimp_ForceRedraw",-1,block%!4,block%!8,block%!12,block%!16
  17056. create_field(Before%,x%,y%,update%,
  17057.  ok%)
  17058.  Desc%,tag$,Len%,Char%,F%,L%,LF%,OL%,x%,y%,width%,height%,dflg%,menflag%,F,chars%,N%,menufield%
  17059. wimp_error(
  17060.  fields%=MaxFields% 
  17061.  moan_err%,
  17062. msg("Err23,"+
  17063. (MaxFields%))
  17064.  $DescText%="" 
  17065.  $TagText%="" 
  17066.  fieldtype%<=8 
  17067.  moan_err%,
  17068. msg("Err149")
  17069. ($DescText%):LF%=
  17070. ($LenText%)
  17071.  L%=0 
  17072.  dflg%=(winback%<<28)+&701A711 
  17073.  dflg%=(winback%<<28)+&701A731
  17074.  fieldtype%<>60 
  17075.  LF%>246 
  17076.  moan_err%,
  17077. msg("Err64")
  17078. ($boxX%):y%=
  17079. ($boxY%):int%=
  17080. ($Gridsnap%):
  17081. snap(x%,y%,int%)
  17082. &width%=
  17083. ($boxW%):height%=
  17084. ($boxH%)
  17085.  fieldtype% 
  17086.  39,40,59:
  17087.   LF%=0
  17088.  width%=0 
  17089.  width%=100
  17090.  height%=0 
  17091.  height%=100
  17092.  35,44,64,65,66,67:LF%=0
  17093.  4,41,42,43,61,62,74,79:LF%=1
  17094.  8,48,50,68,70:LF%=8
  17095.  49,69:LF%=15
  17096.  51,71:LF%=10
  17097.  52,58,72:LF%=24
  17098.  53,55,73,76:LF%=3
  17099.  54,56,75,77:LF%=2
  17100.  57,78:LF%=4
  17101.  60:LF%=RLmax%
  17102.  adjust% 
  17103.   OL%=len%(update%)
  17104.  LF%>OL%:
  17105. ?    
  17106.  moan_err%,
  17107. msg("Err174,"+
  17108. (LF%)+","+
  17109. (len%(update%)))
  17110.  LF%<OL%:LF%=OL%
  17111.  vtype$(fieldtype%) 
  17112.  "K":
  17113.  Keypad button fields: do nothing here
  17114.  fieldtype% 
  17115. E    
  17116.  32,33,34,45,59:
  17117.  Print, Menu, Exit, Quit & Logo. Do nothing
  17118. >    
  17119.  LF%>0 
  17120.  $TagText%="" 
  17121.  moan_err%,
  17122. msg("Err16")
  17123. 8    
  17124.  Allow Unrestricted fields to be used as labels
  17125. 4    
  17126.  $TagText%="" 
  17127.  moan_err%,
  17128. msg("Err16")
  17129.  F%+=1
  17130.  $TagText%=Tag$(F%) 
  17131.  F%>fields%
  17132.  F%=update%:
  17133.  Do nothing
  17134.  fieldtype%=33 
  17135.  $TagText%=Tag$(F%) 
  17136.  $TagText%<>"":menufield%=F%
  17137.  F%<=fields% 
  17138.  $TagText%<>"":
  17139.  moan_err%,
  17140. msg("Err20")
  17141.  update%>0 
  17142. remove_field(update%,
  17143.  fieldtype%=33 
  17144.  menflag%=
  17145. 8fields%+=1:Tag$(fields%)=$TagText%:len%(fields%)=LF%
  17146.  fieldtype% 
  17147.  64,65,66,67:
  17148.   cols%=fieldtype%-63
  17149. )  height%=
  17150. text(createW%,56))*44+6
  17151. .  f$=$database%+"."+Tag$(fields%)+"scroll"
  17152.  "OS_File",8,f$
  17153. (f$+".Format")
  17154.  I%=1 
  17155.  cols%
  17156. $    N%=
  17157. text(createW%,I%+56))
  17158.     chars%+=N%+1
  17159. close_file(F)
  17160.  "OS_File",18,f$+".Format",&fff
  17161. 3  width%=
  17162. guess_width(chars%,fieldtype%,width%)
  17163.  width%=0 
  17164.  $TagText%<>"" 
  17165. c    
  17166.  len%(fields%)<70 
  17167.  width%=
  17168. guess_width(len%(fields%),fieldtype%,width%) 
  17169.  width%=70*16+16
  17170.  height%=0 
  17171.  width%>0 
  17172.  height%=48
  17173. !chartype%(fields%)=fieldtype%
  17174.  fieldtype% 
  17175.  3,6,46,47,54,56,57,74,75,77,78,79:
  17176. 1    
  17177. selected(createW%,45):fix%(fields%)=-1
  17178. 9    
  17179. selected(createW%,14):fix%(fields%)=
  17180. ($Fixpt%)
  17181. :fix%(fields%)=0
  17182. :fix%(fields%)=0
  17183. %dwidth%=
  17184. string_width($DescText%)
  17185. =SHformptr%=
  17186. claim_page(formanchor%,Fptr%-SHformptr%+L%+1)
  17187. \desc%(fields%)=
  17188. create_icon(0,mainW%,x%-dwidth%,y%+2,dwidth%,44,dflg%,"",Fptr%,hand%,L%)
  17189. !$Fptr%=$DescText%:Fptr%+=L%+1
  17190. $Fptr%=""
  17191.  fieldtype% 
  17192.   min$=$mintext%
  17193.   max$=$maxtext%
  17194.  min$<>"" 
  17195.  max$<>"" 
  17196.  calc$(fields%)=min$+"|"+max$ 
  17197.  calc$(fields%)=""
  17198.   calc$(0)="LOADED"
  17199. )  min$=$mintext%:
  17200.  min$="" 
  17201.  min$="0"
  17202. *  max$=$maxtext%:
  17203.  max$="" 
  17204.  max$=min$
  17205. "  calc$(fields%)=min$+"|"+max$
  17206.   calc$(0)="LOADED"  
  17207.  fieldtype% 
  17208.  0,1,2,3,4,5,6,7,8,39,46,47,48,49,50,51,52,53,54,55,56,57,58,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79:valptr%=hand%
  17209. 1$+  
  17210.  40:$Fptr%="file_ff9":valptr%=1:L%=8
  17211. 1%2  
  17212.  59:valptr%=SHlogoptr%:$Fptr%=Tag$(fields%)
  17213. 1&#  
  17214. :valptr%=hvalid%(fieldtype%)
  17215. 1(=SHformptr%=
  17216. claim_page(formanchor%,Fptr%-SHformptr%+L%+1)
  17217. 1)Vfield%(fields%)=
  17218. icon_design(fields%,fieldtype%,x%,y%,width%,height%,valptr%,L%,
  17219. redraw_icon(mainW%,desc%(fields%)):
  17220. redraw_icon(mainW%,field%(fields%))
  17221.  Before%<fields% 
  17222.  Before%>0 
  17223. re_sequence(fields%,Before%,-1)
  17224. selected(createW%,55) 
  17225.  mandatory%?Before%=1 
  17226.  mandatory%?Before%=0
  17227. selected(createW%,63) 
  17228.  displayit%?Before%=1 
  17229.  displayit%?Before%=0
  17230.  menflag% 
  17231. copy_menu_file
  17232. 1/    ok%=
  17233. copy_menu_file
  17234.  field%,f$,d%,F,tag$,m$,forbidden$,I%,P%
  17235.  Before%=0 
  17236.  field%=fields% 
  17237.  field%=Before%
  17238. forbidden$=" $&%@\^:.#*|"
  17239.  menufield%=0 
  17240. 17B  menufield%=
  17241. ($TagText%):
  17242.  menufield%=0 
  17243.  menufield%=field%-1
  17244. 19&V$=vtype$(chartype%(menufield%))  
  17245.  V$<>"E" 
  17246.  V$<>"L" 
  17247.  Tag$(field%)="":$TagText%="":
  17248.  moan_err%,
  17249. msg("Err148")
  17250. 1;N$TagText%=Tag$(menufield%):Tag$(field%)=$TagText%:
  17251. redraw_icon(createW%,5)
  17252. m$=Tag$(menufield%)
  17253.  I%=1 
  17254.   P%=
  17255. forbidden$,
  17256. m$,I%,1))
  17257.  P%>0 
  17258. m$,I%,1)="_" 
  17259.  "OS_File",8,$database%+".Menus"
  17260. 1B%f$=$database%+".Menus."+m$+"Menu"
  17261.  "OS_File",5,f$ 
  17262.  d%=0 
  17263.  oldmenu% 
  17264. 1FJ    
  17265.  "OS_CLI","Copy <Pbase$Dir>.Resources.UserMenu "+f$+" ~CF~V"
  17266. 1H$    
  17267.  "OS_File",5,oldmenu$ 
  17268. 1I6    
  17269.  d%=1 
  17270.  "OS_CLI","Rename "+oldmenu$+" "+f$
  17271. snap(
  17272.  y%,int%)
  17273.  X%,Y%
  17274.  snapgrid%=
  17275.  int%>0 
  17276. 1Q5  X%=(x% 
  17277.  int%)*int%:
  17278.  x%-X%>int% 
  17279.  X%+=int%
  17280. 1R5  Y%=(y% 
  17281.  int%)*int%:
  17282.  Y%-y%>int% 
  17283.  Y%-=int%
  17284.   $boxX%=
  17285. (X%):$boxY%=
  17286.   x%=X%:y%=Y%
  17287. snap_all
  17288.  ic%,x%,y%,w%,h%
  17289.  ic%=0 
  17290.  2*fields%-1
  17291. 1[)  !iconblock%=mainW%:iconblock%!4=ic%
  17292. 1\(  
  17293.  "Wimp_GetIconState",,iconblock%
  17294. 1]&  x%=iconblock%!8:y%=iconblock%!12
  17295. 1^-  w%=iconblock%!16-x%:h%=iconblock%!20-y%
  17296. 1_   
  17297. snap(x%,y%,
  17298. ($Gridsnap%))
  17299. 1`)  iconblock%!8=x%:iconblock%!16=x%+w%
  17300. 1a*  iconblock%!12=y%:iconblock%!20=y%+h%
  17301.   iconblock%!4=mainW%
  17302. 1c>  !block%=mainW%:block%!4=ic%:
  17303.  "Wimp_DeleteIcon",,block%
  17304. 1d(  
  17305.  "Wimp_CreateIcon",,iconblock%+4
  17306. redraw(mainW%)
  17307. nudge(b%,ic%)
  17308.  int%,z%
  17309.  b%=4 
  17310.  z%=1 
  17311.  z%=-1
  17312.  snapgrid% 
  17313.  int%=
  17314. ($Gridsnap%) 
  17315.  int%=2
  17316. 1m-!iconblock%=mainW%:iconblock%!4=oldfield%
  17317.  "Wimp_GetIconState",,iconblock%
  17318. 1o$x%=iconblock%!8:y%=iconblock%!12
  17319. 1p+w%=iconblock%!16-x%:h%=iconblock%!20-y%
  17320.  ic% 
  17321.  50:y%+=int%*z%
  17322.  51:y%-=int%*z%
  17323.  52:x%+=int%*z%
  17324.  53:x%-=int%*z%
  17325. 1w'iconblock%!8=x%:iconblock%!16=x%+w%
  17326. 1x(iconblock%!12=y%:iconblock%!20=y%+h%
  17327. iconblock%!4=mainW%
  17328. 1zB!block%=mainW%:block%!4=oldfield%:
  17329.  "Wimp_DeleteIcon",,block%
  17330.  "Wimp_ForceRedraw",mainW%,x%-int%,y%-int%,x%+w%+int%*2,y%+h%+int%*2
  17331.  "Wimp_CreateIcon",,iconblock%+4
  17332.  (oldfield% 
  17333.  2)=0 
  17334.  x%+=w%:w%=0:h%=0
  17335. 1~7$boxX%=
  17336. (x%):$boxY%=
  17337. (y%):$boxW%=
  17338. (w%):$boxH%=
  17339.  ic%=7 
  17340. redraw_icon(createW%,ic%)
  17341. adjust_field(b%)
  17342.  Dptr%,Fptr%,L%,dflg%,deficit%,extra%
  17343.  "Wimp_GetPointerInfo",,block%
  17344.  newx%=!block%:newy%=block%!4
  17345. #Fieldnumber%=
  17346. get_field(ficon%)
  17347.  (ficon% 
  17348.  2)=0 
  17349. C  !block%=mainW%:block%!4=ficon%:
  17350.  "Wimp_GetIconState",,block%
  17351. .  Dptr%=block%!28:Desc$=$Dptr%:L%=
  17352. (Desc$)
  17353.  L%=0 
  17354.  dflg%=(winback%<<28)+&701A711 
  17355.  dflg%=(winback%<<28)+&701A731
  17356.  "Wimp_DeleteIcon",,block%
  17357.  "Wimp_GetWindowState",,block%
  17358. -  x%=block%!20-block%!4+newx%-oldx%+minx%
  17359. .  y%=block%!24-block%!16+miny%+newy%-oldy%
  17360. snap(x%,y%,
  17361. ($Gridsnap%))
  17362. f  desc%(Fieldnumber%)=
  17363. create_icon(0,mainW%,x%,y%,
  17364. string_width(Desc$),44,dflg%,"",Dptr%,hand%,L%)
  17365. C  !block%=mainW%:block%!4=ficon%:
  17366.  "Wimp_GetIconState",,block%
  17367.   Fptr%=block%!28
  17368. $    
  17369.  "Wimp_DeleteIcon",,block%
  17370. (    
  17371.  "Wimp_GetWindowState",,block%
  17372. #    x%=block%!20-block%!4+minx%
  17373. 0    y%=block%!24-block%!16+miny%+newy%-oldy%
  17374. "    
  17375. snap(x%,y%,
  17376. ($Gridsnap%))
  17377. F    width%=maxx%-minx%+newx%-oldx%:height%=maxy%-miny%+oldy%-newy%
  17378. '    keepwith%=
  17379. selected(prefsW%,16)
  17380.  keepwith% 
  17381. I      !block%=mainW%:block%!4=ficon%-1:
  17382.  "Wimp_GetIconState",,block%
  17383. 2      Dptr%=block%!28:Desc$=$Dptr%:L%=
  17384. (Desc$)
  17385. P      
  17386.  L%=0 
  17387.  dflg%=(winback%<<28)+&701A711 
  17388.  dflg%=(winback%<<28)+&701A731
  17389. &      
  17390.  "Wimp_DeleteIcon",,block%
  17391.         
  17392. C    !block%=mainW%:block%!4=ficon%:
  17393.  "Wimp_DeleteIcon",,block%
  17394.  keepwith% 
  17395. &      dwidth%=
  17396. string_width(Desc$)
  17397. *      
  17398.  "Wimp_GetWindowState",,block%
  17399. 9      x%=block%!20-block%!4+newx%-oldx%+minx%-dwidth%
  17400. 2      y%=block%!24-block%!16+miny%+newy%-oldy%
  17401. $      
  17402. snap(x%,y%,
  17403. ($Gridsnap%))
  17404. _      desc%(Fieldnumber%)=
  17405. create_icon(0,mainW%,x%,y%+2,dwidth%,44,dflg%,"",Dptr%,hand%,L%)
  17406.         
  17407. (    
  17408.  "Wimp_GetWindowState",,block%
  17409. /    x%=block%!20-block%!4+newx%-oldx%+minx%
  17410. 0    y%=block%!24-block%!16+miny%+newy%-oldy%
  17411. "    
  17412. snap(x%,y%,
  17413. ($Gridsnap%))
  17414. .    width%=maxx%-minx%:height%=maxy%-miny%
  17415. (  fieldtype%=chartype%(Fieldnumber%)
  17416.   L%=4
  17417.  fieldtype% 
  17418. -    
  17419.  40:$Fptr%="file_ff9":valptr%=1:L%=8
  17420. :    
  17421.  59:valptr%=SHlogoptr%::$Fptr%=Tag$(Fieldnumber%)
  17422.  64,65,66,67:
  17423. 4    deficit%=(height%-6) 
  17424.  44:extra%=44-deficit%
  17425. 1    
  17426.  deficit%>0 
  17427.  height%+=extra%:y%-=extra%
  17428. #    valptr%=hvalid%(fieldtype%)
  17429. %    
  17430. :valptr%=hvalid%(fieldtype%)
  17431. b  field%(Fieldnumber%)=
  17432. icon_design(Fieldnumber%,fieldtype%,x%,y%,width%,height%,valptr%,L%,
  17433. @$boxX%=
  17434. (x%):$boxY%=
  17435. (y%):$boxW%=
  17436. (width%):$boxH%=
  17437. (height%)
  17438. !block%=mainW%
  17439.  "Wimp_GetWindowState",,block%
  17440.  "Wimp_ForceRedraw",-1,block%!4,block%!8,block%!12,block%!16
  17441. swap_fields(F1%,F2%)
  17442.  F2%>0 
  17443.  F2%<=fields% 
  17444.  desc%(F1%),desc%(F2%)
  17445.  Tag$(F1%),Tag$(F2%)
  17446.  field%(F1%),field%(F2%)
  17447.  len%(F1%),len%(F2%)
  17448.  chartype%(F1%),chartype%(F2%)
  17449.  fix%(F1%),fix%(F2%)
  17450.  calc$(F1%),calc$(F2%)
  17451. re_sequence(F1%,F2%,Z%)
  17452. jD%=desc%(F1%):T$=Tag$(F1%):F%=field%(F1%):L%=len%(F1%):C%=chartype%(F1%):f%=fix%(F1%):Calc$=calc$(F1%)
  17453.  I%=F1%+Z% 
  17454.  F2% 
  17455.   desc%(I%-Z%)=desc%(I%):Tag$(I%-Z%)=Tag$(I%):field%(I%-Z%)=field%(I%):len%(I%-Z%)=len%(I%):chartype%(I%-Z%)=chartype%(I%):fix%(I%-Z%)=fix%(I%):calc$(I%-Z%)=calc$(I%)
  17456. jdesc%(F2%)=D%:Tag$(F2%)=T$:field%(F2%)=F%:len%(F2%)=L%:chartype%(F2%)=C%:fix%(F2%)=f%:calc$(F2%)=Calc$
  17457. icon_design(field%,char%,x%,y%,w%,h%,val%,len%,new%)
  17458.  flags%,bit%,V%
  17459.  design% 
  17460.  bit%=&8000 
  17461.  bit%=&1000
  17462.  char% 
  17463.  9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:
  17464. F  !block%=keypadW%:block%!4=char%-9:
  17465.  "Wimp_GetIconState",,block%
  17466. 2  w%=block%!16-block%!8:h%=block%!20-block%!12
  17467.   flags%=&1E00253F 
  17468.  bit%
  17469.  Keypad buttons. Get w% & h% direct from keypad
  17470.  char% 
  17471.  13,14:
  17472.  design% 
  17473.  flags%=&1E00253F
  17474.  0,1,2,3,4,5,6,7,8,46,47,48,49,50,51,52,53,54,55,56,57,58,63,68,69,70,71,72,73,74,75,76,77,78,79:
  17475. E    
  17476.  hide%?field%=1:flags%=&00A535+(winback%<<24)+(winback%<<28)
  17477. ;    
  17478.  mandatory%?field%=1:flags%=&00A535+(fcol%(9)<<24)
  17479. :flags%=&0700A535
  17480.  21:$Fptr%="Rotate":len%=7:flags%=&1700253D 
  17481.  bit%
  17482.  27:flags%=&1700253D 
  17483.  bit%
  17484.  Tools%=1 
  17485.  $Fptr%="List values":len%=12 
  17486.  $Fptr%="Table":len%=6
  17487.  28:flags%=&1700253D 
  17488.  bit%
  17489.  Tools%=1 
  17490.  $Fptr%="Force update":len%=13 
  17491.  $Fptr%="Update":len%=7
  17492.  31:w%=48:h%=48:flags%=&1700253B 
  17493.  bit%
  17494.  32:$Fptr%="Print":len%=6:w%=112:h%=48:flags%=&1700253D 
  17495.  bit%
  17496.  33:w%=44:h%=44:flags%=&1700253B 
  17497.  bit%
  17498.  34:$Fptr%="Exit":len%=5:w%=112:h%=48:flags%=&1700253D 
  17499.  bit%
  17500.  35,44:w%=Buttonwidth%*2:h%=84-WithLeaf%*30:flags%=(&1700213F+WithLeaf%*16) 
  17501.  bit%
  17502.  36,37,38:w%=48:h%=48:flags%=&1700253F 
  17503.  bit%
  17504.  39:flags%=&0700A535
  17505.  40:$Fptr%="file_ff9":val%=1:flags%=&0700A53E:len%=8:
  17506.  present%=7 
  17507.  Rf%(field%)=
  17508. create_anchor("Picture"+
  17509. (field%))
  17510.  41,42,43,61,62:w%=52:h%=52:flags%=&1700253B 
  17511.  bit%
  17512.  45:$Fptr%="Quit":len%=5:w%=112:h%=48:flags%=&1700253D 
  17513.  bit%
  17514.  59:flags%=&0000A139-logosloaded%+(winback%<<28)
  17515.  60::w%=84:h%=84:flags%=&1700213F 
  17516.  bit%
  17517.  64,65,66,67:flags%=&1700A024
  17518.  w%=0 
  17519.  h%=0 
  17520.  flags%=0
  17521.  new% 
  17522.  SHformptr%=
  17523. claim_page(formanchor%,Fptr%-SHformptr%+len%+4)
  17524. Hicon%=
  17525. create_icon(0,mainW%,x%,y%,w%,h%,flags%,"",Fptr%,val%,len%+1)
  17526.  new% 
  17527.  Fptr%+=len%+4
  17528. =icon%
  17529. get_field(ic%)
  17530.  F%+=1
  17531.  field%(F%)=ic% 
  17532.  desc%(F%)=ic% 
  17533.  F%>fields%
  17534. adjust_on(on%)
  17535. design%=on%:adjust%=on%
  17536. lit(designM%,7,on%)
  17537. lit(designM%,2,
  17538.  on%)
  17539. lit(designM%,3,
  17540.  on%)
  17541. lit(designM%,4,
  17542.  on%)
  17543. lit(designM%,5,
  17544.  on%)
  17545. shade(createW%,6,
  17546.  on%)
  17547.  on% 
  17548. kill_scrollers(
  17549. close_window(keypadW%)
  17550. (  w%=ScreenWidth%*2:h%=MaxFields%*64
  17551. 4  !block%=0:block%!4=-h%:block%!8=w%:block%!12=0
  17552.  "Wimp_SetExtent",mainW%,block%
  17553.  F%=1 
  17554.  fields%
  17555.  vtype$(chartype%(F%)) 
  17556.  "K","O","T","X":
  17557. 1    
  17558. icon_bit(15,mainW%,field%(F%),
  17559.  adjust%)
  17560. 2 /    
  17561. icon_bit(12,mainW%,field%(F%),adjust%)
  17562. close_window(markW%):markpane%=
  17563. :ShowTools%=
  17564. change_length(NL%,msg%)
  17565.  EX%,klm%,S$,N%
  17566. EX%=NL%-RA%
  17567.  EX%=0 
  17568. 2*-SHmarkptr%=
  17569. claim_page(markanchor%,NL%+4)
  17570. 2+*dbasehandle%=
  17571. ($database%+".Database")
  17572. readsmarray(dbasehandle%,RA%)
  17573.  msg%:
  17574. extend_dbase
  17575.  (EX%>0):
  17576. confirm(
  17577. msg("Err204,"+
  17578. (RA%)+","+
  17579. (NL%)))=
  17580. extend_dbase
  17581.  (EX%<0):
  17582. confirm(
  17583. msg("Err205,"+
  17584. (RA%)+","+
  17585. (NL%)))=
  17586. shorten_dbase
  17587. $Records%=
  17588. (RA%):N%=RA%
  17589. writesmarray(dbasehandle%,N%)
  17590. close_file(dbasehandle%)
  17591.  msg% 
  17592.  addr=
  17593. moveto(key%,top,1)
  17594. renew_tables
  17595. extend_dbase
  17596.  end%,P%,I%,key%,keybase%,KLM%,S$
  17597.  key%=0 
  17598.  Keys%
  17599.   S$=
  17600. KL%(key%),".")
  17601.   KLM%=KL%(key%)+13
  17602.   P%=LH%+48+(NL%+1)*KLM%
  17603. 2AF  SHkeyptr%(key%)=
  17604. extend_named_sliding_block(keyanchor%(key%),P%)
  17605.   keybase%=SHkeyptr%(key%)
  17606. 2C   keybase%=!keyanchor%(key%)
  17607.   P%=LH%+48+RA%*KLM%
  17608.  I%=RA% 
  17609.  EX%+RA%-1
  17610.     !(keybase%+P%)=P%+KLM%
  17611.     !(keybase%+P%+4)=0
  17612.     $(keybase%+P%+8)=S$
  17613. 2I%    !(keybase%+P%+KL%(key%)+9)=I%
  17614.     P%+=KLM%
  17615.   !(keybase%+P%)=0
  17616.   !(keybase%+P%+4)=0
  17617.   $(keybase%+P%+8)=S$
  17618. 2O"  !(keybase%+P%+KL%(key%)+9)=0
  17619.  key%
  17620. end%=(RA%+1)*Length%
  17621.  "Hourglass_On"
  17622.  I%=0 
  17623.  EX%-1
  17624. 2T$  
  17625. #dbasehandle%=end%+I%*Length%
  17626.  J%=1 
  17627.  fields%
  17628. #dbasehandle%,""
  17629. 2X.  
  17630.  "Hourglass_Percentage",(I%*100) 
  17631.  "Hourglass_Off"
  17632. RA%=NL%
  17633. #dbasehandle%=(RA%+1)*Length%
  17634. shorten_dbase
  17635.  P%,L%,R%,s$,key%,keybase%,S$
  17636.  key%=0 
  17637.  Keys%
  17638.   S$=
  17639. KL%(key%),".")
  17640.   KLM%=KL%(key%)+13
  17641.   keybase%=SHkeyptr%(key%)
  17642. 2e$  s$=$(keybase%+LH%+56+NL%*KLM%)
  17643. 2f]  
  17644.  s$<>S$ 
  17645. close_file(dbasehandle%):
  17646.  "Wimp_CreateMenu",,-1:
  17647.  moan_err%,
  17648. msg("Err52")
  17649.   P%=LH%+48+NL%*KLM%
  17650.   !(keybase%+P%)=0
  17651.   !(keybase%+P%+4)=0
  17652.   $(keybase%+P%+8)=S$
  17653. 2k"  !(keybase%+P%+KL%(key%)+9)=0
  17654.  key%
  17655. RA%=NL%
  17656. #dbasehandle%=(RA%+1)*Length%
  17657. copy_database_spritefile(path$,leaf$)
  17658.  SHappsprite%
  17659. 2sBSHappsprite%=
  17660. extend_named_sliding_block(sprsanchor%,SHclaim%)
  17661.  ### This is a temporary sprite area used simply to hold ###
  17662.  ### the sprite 'new_appl' whilst it is renamed and saved ###
  17663. !SHappsprite%=2600
  17664. SHappsprite%!8=16
  17665.  ### Initialise sprite area ###
  17666.  "OS_SpriteOp",&109,SHappsprite%
  17667.  ### Load !Sprites file from Resources ###
  17668.  "OS_SpriteOp",&10A,SHappsprite%,"<PBase$Dir>.Resources.Temp.!Sprites"
  17669.  ### Rename sprite 'new_appl' to new database name ###
  17670.  "OS_SpriteOp",&11A,SHappsprite%,"new_appl",leaf$
  17671.  ### Save spritefile (with renamed new_appl) as !Sprites ###
  17672.  "OS_SpriteOp",&10C,SHappsprite%,path$+".!Sprites"
  17673.  ### Do same for hi-res sprite ###
  17674.  "OS_SpriteOp",&109,SHappsprite%
  17675.  "OS_SpriteOp",&10A,SHappsprite%,"<PBase$Dir>.Resources.Temp.!Sprites22"
  17676.  "OS_SpriteOp",&11A,SHappsprite%,"new_appl",leaf$
  17677.  "OS_SpriteOp",&10C,SHappsprite%,path$+".!Sprites22"
  17678. scrap_block(sprsanchor%)
  17679. rename_database(name$)
  17680.  SHappsprite%,len%
  17681. name$=
  17682. force_pling(name$)
  17683.  "OS_File",5,$database%+".!Sprites22" 
  17684.  ,,,,len%
  17685. BSHappsprite%=
  17686. extend_named_sliding_block(sprsanchor%,len%+100)
  17687. !SHappsprite%=len%+100
  17688. SHappsprite%!8=16
  17689.  "OS_SpriteOp",&109,SHappsprite%
  17690.  "OS_SpriteOp",&10A,SHappsprite%,$database%+".!Sprites"
  17691.  "OS_SpriteOp",&11A,SHappsprite%,"!"+$dbase%,name$
  17692.  "OS_SpriteOp",&10C,SHappsprite%,$database%+".!Sprites"
  17693.  "OS_SpriteOp",&109,SHappsprite%
  17694.  "OS_SpriteOp",&10A,SHappsprite%,$database%+".!Sprites22"
  17695.  "OS_SpriteOp",&11A,SHappsprite%,"!"+$dbase%,name$
  17696.  "OS_SpriteOp",&10C,SHappsprite%,$database%+".!Sprites22"
  17697. iconbar_icon(
  17698. name$,2))
  17699. scrap_block(sprsanchor%)
  17700. #$Title%=name$:
  17701. redraw(keypadW%)
  17702. old$=
  17703. leaf($database%)
  17704. !name$=leafnamepath$+"."+name$
  17705.  "OS_CLI","Rename "+$database%+" "+name$
  17706. $database%=name$
  17707.  logging% 
  17708.  "OS_CLI","Unset Log$Dir":
  17709. read_sys_vars($database%)
  17710. write_log(-1,"Database renamed:",old$+"---> "+
  17711. leaf(name$))
  17712. defaults(f$,N%,key%)
  17713. ?abort%=
  17714. confirm(
  17715. msg("Err133,"+
  17716. (N%)+","+Tag$(KF%(0,0))))
  17717.  abort% 
  17718. $Records%=
  17719. make_empty_index(N%,key%,
  17720. save_recs(f$+".Database",N%)
  17721. %present%=7:
  17722. save_keys:
  17723. save_calcs
  17724. 2design%=
  17725. :present%=1:
  17726. get_it_in(f$):ramwarn%=
  17727. lit(iconbarM%,2,
  17728. default_key
  17729. first_writable
  17730.  chartype%(F%) 
  17731.  3,6,46,47,54,56,57,74,75,77,78,79:KL%(0)=len%(F%)
  17732.  len%(F%)>3 
  17733.  KL%(0)=4 
  17734.  KL%(0)=len%(F%)
  17735. key%=0
  17736. KW%()=0:KF%()=0
  17737. 0KW%(0,0)=KL%(0)+(1<<16)+(F%<<24):KF%(0,0)=F%
  17738. set_keydata(key%)
  17739. new_tree(f%)
  17740.  REC%,ptr%,file%,old$,new$
  17741. old$=
  17742. key_structure
  17743. selected(keyW%,33):s%=
  17744. selected(keyW%,32)
  17745.  f%=0
  17746. M$="Build index with "
  17747.  M$+="records in same subfiles" 
  17748.  M$+="all records in subfile "+
  17749. M$+=" of current database"
  17750.  M$+=", also restoring 'deleted' records."
  17751.  M$+=" WARNING! Other indices will need rebuilding!"
  17752. confirm(M$)=
  17753. =SHmisc%=
  17754. extend_named_sliding_block(tempanchor%,SHclaim%)
  17755. mark_files(SHmisc%,0,RA%,
  17756.  d%,s%,f%)
  17757. copy_keydata(0)
  17758.  "OS_File",5,$database%+".Database" 
  17759.  ,,,,len%
  17760. RA%=(len% 
  17761.  Length%)-1
  17762. scrap_block(keyanchor%(0))
  17763. make_empty_index(RA%,0,
  17764. close_window(keyW%)
  17765. redraw(keypadW%)
  17766. %SHmisc%=!tempanchor%:ptr%=SHmisc%
  17767. duplicates%=0
  17768.  "Hourglass_On"
  17769. *dbasehandle%=
  17770. ($database%+".Database")
  17771.  REC%=0 
  17772.  RA%-1
  17773.   file%=ptr%?REC%
  17774.  file%<>255 
  17775.     top=8*file%+LH%
  17776. '    
  17777. readsmarray(dbasehandle%,REC%)
  17778.     KEY$=
  17779. key2(0,1)
  17780.      K$=
  17781. stripright(KEY$," ")
  17782.  K$<>"" 
  17783.       
  17784. insert(KEY$,0,
  17785.       
  17786.       
  17787. %        
  17788. close_file(dbasehandle%)
  17789. 5        
  17790. load_index($database%+".PrimaryKey",0,
  17791. &        
  17792.  moan_err%,
  17793. msg("Err111")
  17794.         
  17795.  ptr%?REC%=255
  17796.       
  17797.         
  17798.  "Hourglass_Percentage",(REC%*100) 
  17799.  REC%
  17800. close_file(dbasehandle%)
  17801. Vkeybase%=SHkeyptr%(0):nextfree%=!keybase%:nodesize%=12+KL%(0)+1:offset%=8+KL%(0)+1
  17802.  REC%=0 
  17803.  RA%-1
  17804.  ptr%?REC%=255 
  17805. *    !(keybase%+nextfree%+offset%)=REC%
  17806.     nextfree%+=nodesize% 
  17807.  REC%
  17808. "newtree%=
  17809. :design%=
  17810. :adjust%=
  17811.  "Hourglass_Off"
  17812.  duplicates%>0 
  17813. softerror(
  17814. (duplicates%),175)
  17815. present%=7
  17816. new$=
  17817. key_structure
  17818.  K%=0 
  17819.  Keys%
  17820. #  SHkeyptr%(K%)=!keyanchor%(K%)
  17821. write_log(-1,"Primary key structure altered. Was: "+old$,"Changed to: "+new$)
  17822.  "Wimp_CreateMenu",,-1
  17823. 3file%=0:top=8*file%+LH%:
  17824. asterisk(
  17825. ):ramwarn%=
  17826. renew_tables
  17827. get_it_in($database%):ramwarn%=
  17828. key_structure
  17829.  I%,W%,chars%,pos%,word%,c$,p$,w$,struc$
  17830.  I%=0 
  17831.   W%=KW%(0,I%)
  17832.  W%>0 
  17833. $    chars%=W% 
  17834.  255:c$=
  17835. (chars%)
  17836. M    pos%=(W%>>8) 
  17837.  255:p$=
  17838. (pos%):
  17839.  pos%=0 
  17840.  p$="L" 
  17841.  pos%=255 
  17842.  p$="R"
  17843. (    word%=(W%>>16) 
  17844.  255:w$=
  17845. (word%)
  17846. :    struc$+=Tag$(KF%(0,I%))+" ("+w$+","+p$+","+c$+"),"
  17847. struc$)
  17848. reformat(f$)
  17849.  I%,J%,F,REC%,dfields%,DLength%,newhandle%,z%,key%,then%,now%,path$,F$,C%,col%,col2%
  17850.  DTag$(),F%(),F1%(),L%(),V%(),l$(),c$()
  17851.  f$ will become reformatted database
  17852.  Original database is open during this function
  17853. F$(0)=""
  17854.  "OS_File",5,f$+".Form" 
  17855.  z%<>1 
  17856. softerror("",19):=
  17857. store_menu_inf
  17858. copy_files($database%,f$)
  17859. (f$+".Form")
  17860. #F,dfields%
  17861.  DTag$(dfields%),F%(dfields%),F1%(fields%),L%(dfields%),V%(dfields%),l$(dfields%),c$(dfields%)
  17862.  I%=1 
  17863.  dfields%
  17864. #F,Desc$,DTag$(I%),xd%,yd%,xf%,yf%,L%(I%),V%(I%),extra%,extra%
  17865.  V%(I%)=33 
  17866.  DTag$(I%)="!"+DTag$(I%)
  17867.  L%(I%)>0 
  17868.  DLength%+=L%(I%)+1
  17869. close_file(F)
  17870. compare 
  17871. selected(reformW%,11) 
  17872. position_window(informW%,0,0,0,0,0,0)
  17873. complete(2)
  17874. 3  newhandle%=
  17875. (f$+".Database")
  17876. 3!,dbasehandle%=
  17877. ($database%+".Database")  
  17878.  "Hourglass_On"
  17879.  REC%=0 
  17880. 3$   
  17881. #newhandle%=REC%*DLength%
  17882. 3%%  
  17883. readsmarray(dbasehandle%,REC%)
  17884.  I%=1 
  17885.  dfields%
  17886.     S$=F$(F%(I%))
  17887.  V%(I%) 
  17888.       
  17889.  5,50,51,70,71:
  17890.       
  17891. 3+2        
  17892.  S$="":
  17893.  Date field blank; do nothing
  17894. 3,2        
  17895. (S$)=10 
  17896.  L%(I%)=8:S$=
  17897. S$,6)+
  17898. S$,2)
  17899. 3-"        
  17900. (S$)=8 
  17901.  L%(I%)=10:
  17902.         y$=
  17903. S$,2):y%=
  17904. 3/6        
  17905.  y%<CentChange% 
  17906.  y$="20"+y$ 
  17907.  y$="19"+y$
  17908.         S$=
  17909. S$,6)+y$
  17910.       
  17911.       
  17912.  64,65,66,67:
  17913. 339      
  17914.  V%() holds destination database's field-types
  17915. 342      
  17916.  chartype%() holds original field-types
  17917. 356      Scols%=chartype%(F%(I%))-63:Dcols%=V%(I%)-63
  17918.       
  17919.  Scols%<>Dcols% 
  17920. 375        L%=
  17921. blob_path(
  17922. ,f$,REC%,F%(I%),V%(I%),b$)
  17923.         
  17924.  L%>0 
  17925. 390          old%=
  17926. (b$):temp%=
  17927. ("<Wimp$Scrap>")
  17928.           
  17929. #old%
  17930. 3;#            F$=
  17931. #old%:col%=C%+1
  17932.             
  17933. 3=,              
  17934.  col%>Dcols%:
  17935.  Do nothing
  17936. 3>5              
  17937.  col%=Scols%:
  17938. #temp%,F$:col2%=col%
  17939. 3?!              
  17940.  col2%<Dcols%
  17941. 3@'                
  17942. #temp%,"":col2%+=1
  17943.               
  17944. 3B+              
  17945.  col%<=Dcols%:
  17946. #temp%,F$
  17947.             
  17948. 3D"            C%=(C%+1) 
  17949.  Scols%
  17950.           
  17951. 3F2          
  17952. close_file(old%):
  17953. close_file(temp%)
  17954. 3G:          
  17955.  "OS_CLI","Copy <Wimp$Scrap> "+b$+" ~C~VF"
  17956.         
  17957.       
  17958. 3J        
  17959. 3K'    
  17960. (S$)>L%(I%) 
  17961. S$,L%(I%))
  17962. 3L$    
  17963.  L%(I%)>0 
  17964. #newhandle%,S$
  17965. 3N0  
  17966.  "Hourglass_Percentage",(REC%*100) 
  17967.  REC%
  17968.  "OS_CLI","Remove <Wimp$Scrap>"
  17969.  "Hourglass_Off"
  17970. close_file(newhandle%)
  17971. close_file(dbasehandle%)
  17972.  "OS_File",18,f$+".Database",&fff
  17973.  link$(0)="LOADED" 
  17974. (f$+".Link")
  17975.  F%=1 
  17976.  dfields%
  17977. #F,l$(F%)
  17978. close_file(F)
  17979.  calc$(0)="LOADED" 
  17980. (f$+".Calc")
  17981.  F%=1 
  17982.  dfields%
  17983. #F,c$(F%)
  17984. close_file(F)
  17985.  key%=0 
  17986.  Keys%
  17987. 3dK  
  17988.  key%=0 
  17989.  path$=f$+".PrimaryKey" 
  17990.  path$=f$+".Indices."+Index$(key%)
  17991. (path$)
  17992. #F=74
  17993.  J%=0 
  17994.     then%=KW%(key%,J%)>>24
  17995. 3i,    
  17996.  then%>0 
  17997.  now%=F1%(then%) 
  17998.  now%=0
  17999. #F=74+3+J%*4
  18000. 3k     
  18001.  now%<>then% 
  18002. #F,now%
  18003. close_file(F)
  18004.  key%
  18005. close_window(reformW%)
  18006. close_it(informW%)
  18007. asterisk(
  18008. write_log(-1,"Record structure changed","")
  18009. compare
  18010.  source%,dest%,del$,short$,col$
  18011.  source%=1 
  18012.  fields%
  18013. 3x?  
  18014.  chartype%(source%)=33 
  18015.  Tag$(source%)="!"+Tag$(source%)
  18016.   dest%=dfields%+1
  18017.     dest%-=1
  18018. 3|,  
  18019.  dest%=0 
  18020.  DTag$(dest%)=Tag$(source%)
  18021. 3}*  F%(dest%)=source%:F1%(source%)=dest%
  18022.  dest%=0 
  18023.     del$+=Tag$(source%)+"\"
  18024.         
  18025.      l$(dest%)=link$(source%)
  18026.      c$(dest%)=calc$(source%)
  18027.  chartype%(source%) 
  18028.       
  18029.  64,65,66,67:
  18030. B      
  18031.  V%(dest%)<chartype%(source%) 
  18032.  col$+=Tag$(source%)+"\"
  18033. A      
  18034.  L%(dest%)<len%(source%) 
  18035.  short$+=Tag$(source%)+"\"
  18036.         
  18037.  source%
  18038.  del$<>"" 
  18039. confirm(
  18040. msg("Err97,"+
  18041. del$))) 
  18042.  short$<>"" 
  18043. confirm(
  18044. msg("Err117,"+
  18045. short$))) 
  18046.  col$<>"" 
  18047. confirm(
  18048. msg("Err177,"+
  18049. col$))) 
  18050. merge_files(merge$,new$,fi%)
  18051.  R%,REC%,ptr%,file%,d%,s%,z%,RUM%,RAM%,NL%,ex%,blobs%
  18052.  new$<>$database% 
  18053.  "OS_CLI","Copy "+$database%+" "+new$+" ~C ~V R"
  18054. get_it_in(new$)
  18055. text(mergebaseW%,2)=$database%:
  18056. redraw_icon(mergebaseW%,2)
  18057.  "OS_File",5,merge$+".Database" 
  18058.  z%<>1:
  18059. softerror("",29)
  18060.  merge$=$database%:
  18061. softerror("",15)
  18062. identical(merge$):
  18063. softerror("",21)
  18064. ?  s%=
  18065. selected(mergebaseW%,11):d%=
  18066. selected(mergebaseW%,12)
  18067.  fi%=0
  18068. !  M$="Merge "+merge$+" with "
  18069.  M$+="corresponding subfiles" 
  18070.  M$+="subfile "+
  18071. (fi%)
  18072.    M$+=" of current database"
  18073.  M$+=", also restoring deleted records"
  18074.  M$+=". WARNING! Indices will need rebuilding!"
  18075. confirm(M$)=
  18076. 4    
  18077.  "OS_File",5,merge$+".Database" 
  18078.  ,,,,len%
  18079.     RAM%=(len% 
  18080.  Length%)-1
  18081. I    
  18082.  ### Load primary key of file to be merged into a spare slot ###
  18083. 6    
  18084. load_index(merge$+".PrimaryKey",MaxKeys%+1,
  18085. @    
  18086.  ### Mark which subfile each new record is to go in ###
  18087. =    SHmisc%=
  18088. extend_named_sliding_block(tempanchor%,RAM%)
  18089. 8    
  18090. mark_files(SHmisc%,MaxKeys%+1,RAM%,
  18091.  d%,s%,fi%)
  18092. &    keybase%=SHkeyptr%(MaxKeys%+1)
  18093. F    
  18094.  ### Count how many record actually used in file to merge ###
  18095. -    
  18096. count(MaxKeys%+1,RUM%):
  18097. count(0,RU%)
  18098. *    
  18099.  NL%=RU%+RAM% 
  18100.  NL%=RU%+RUM%
  18101.  "Hourglass_On"
  18102. O    
  18103.  ### Expand existing file if new length (NL%) exceeds availability ###
  18104. )    
  18105.  NL%>RA% 
  18106. change_length(NL%,
  18107. &    blobs%=
  18108. find_blobs($database%)
  18109. )    SHmisc%=!tempanchor%:ptr%=SHmisc%
  18110.  R%=0 
  18111.  RAM%-1
  18112.       file%=ptr%?R%
  18113.       
  18114.  file%<>255 
  18115.         
  18116. make_new_rec
  18117.         top=8*file%+LH%
  18118. (        
  18119. read(
  18120. ,fields%,
  18121. ,R%,merge$)
  18122. <        
  18123. selected(mergebaseW%,10) 
  18124.  dontincrement%=
  18125.          
  18126. write(fields%,key%)
  18127.         ex%=-1
  18128.         
  18129.  ex%<blobs%
  18130. !          ex%+=1:F%=Ext%(ex%)
  18131. D          
  18132. copy_blob(merge$,$database%,R%,REC%,F%,chartype%(F%))
  18133.         
  18134. 5        
  18135.  "Hourglass_Percentage",(R%*100) 
  18136.  RUM%
  18137.       
  18138.  "Hourglass_Off"
  18139. close_it(mergebaseW%)
  18140. !    file%=fi%:top=8*file%+LH%
  18141.      addr=
  18142. moveto(key%,top,1)
  18143. asterisk(
  18144. write_log(-1,"Records merged from database:",merge$)
  18145. identical(f$)
  18146.  I%,F,dfields%,different%
  18147. (f$+".Form")
  18148. #F,dfields%
  18149.  dfields%<>fields% 
  18150.  different%=
  18151.  I%<fields% 
  18152.  different%
  18153.   I%+=1
  18154. #F,Desc$,Tag$,xd%,yd%,xf%,yf%,len%,char%,extra%,extra%
  18155.   char%=char% 
  18156.  char%<>39 
  18157.  len%<>len%(I%) 
  18158.  different%=
  18159.  char%<>chartype%(I%) 
  18160.  (char%>8 
  18161.  chartype%(I%)>8) 
  18162.  different%=
  18163. close_file(F)
  18164.  different%
  18165. mark_files(ptr%,key%,RA%,d%,s%,f%)
  18166.  P%,I%,M,file%,top
  18167.  "Hourglass_On"
  18168.  I%=0 
  18169.  RA%-1
  18170.   ptr%?I%=d%
  18171.  file%=0 
  18172.     top=8*file%+LH%
  18173. !    P%=
  18174. neighbour(key%,top,1)
  18175.  P%<>top
  18176.        S%=
  18177. rec_no(k$,key%,P%)
  18178. +      
  18179.  ptr%?S%=file% 
  18180.  ptr%?S%=f%
  18181. "      P%=
  18182. neighbour(key%,P%,1)
  18183.         
  18184.  file%
  18185.  "Hourglass_Off"                          
  18186. print_tree(key%,PR$)
  18187.  L%(),levels%(),COL%,levels%,depth%,P%,keybase%,L%,L$,M$,fi%,top,maxlevels%,total%,sym%,pos%
  18188.  levels%(5)
  18189. PTextName$=$database%+".PrintJobs.Tree"+
  18190. Index$(key%),6):$SaveName%=TextName$
  18191. ticked(indextreeM%,1) 
  18192.  from%=file%:to%=file% 
  18193.  from%=0:to%=5
  18194.  "Hourglass_On"
  18195.  fi%=from% 
  18196.   top=8*fi%+LH%
  18197.   COL%=0:depth%=0
  18198. A  keybase%=SHkeyptr%(key%):P%=!(keybase%+top):
  18199. traverse(P%,
  18200.   levels%(fi%)=depth%-2
  18201.  levels%(fi%)>maxlevels% 
  18202.  maxlevels%=levels%(fi%)
  18203.  maxlevels%>127 
  18204. rectify_address(key%):
  18205.  moan_err%,
  18206. msg("Err153")
  18207.  L%(maxlevels%)
  18208.  interval%=
  18209. (2^maxlevels%))
  18210.  PR$="ALL" 
  18211.  KL%(key%)>interval% 
  18212.  interval%=KL%(key%)
  18213. interval%+=1
  18214. print_init("W")
  18215. format$="tree"
  18216. 1LenLine%=Lmargin%+(maxlevels%+1)*interval%+12
  18217.  LenLine%<30 
  18218.  LenLine%=30
  18219. %maxhead%=0:hspace%=200:fspace%=18
  18220. (Tab%(2)=12:PrintFields%=maxlevels%+2
  18221.  L%=1 
  18222.  maxlevels%+1
  18223. %  Tab%(L%+2)=Tab%(L%+1)+interval%
  18224. end_line
  18225. send_title(
  18226. send_title($dbase%+" - Tree Analysis")
  18227. send_title("Key "+
  18228. (key%)+" ("+Index$(key%)+")")
  18229. sym%=
  18230. ticked(indextreeM%,2)
  18231.  fi%=from% 
  18232.  levels%(fi%)>=0 
  18233. '    pos%=TextPtr%+Lmargin%+LenLine%
  18234. store_rec_num(-2)
  18235. 3    
  18236. store_string("Subfile "+
  18237. (fi%),Lmargin%,
  18238. store_rec_num(-2)
  18239. end_line
  18240. #    
  18241. tree_heading(levels%(fi%))
  18242.     top=8*fi%+LH%
  18243.     COL%=0:depth%=0:L%()=0
  18244. C    keybase%=SHkeyptr%(key%):P%=!(keybase%+top):
  18245. traverse(P%,
  18246.     total%=
  18247. (L%())
  18248.     S$=
  18249. (total%)+" node"
  18250.  total%>1 
  18251.  S$+="s"
  18252. 4!%    $pos%=S$:pos%+=
  18253. (S$):?pos%=32
  18254.  PR$="ALL" 
  18255. 4#     L1$=
  18256. padL("1",interval%)
  18257. store_rec_num(-2)
  18258. 4%2    
  18259. store_string("No. nodes "+L1$,Lmargin%,
  18260.     L%=0
  18261.  L%<levels%(fi%)
  18262.       L%+=1 
  18263. 4)(      L$=
  18264. padL(
  18265. (L%(L%)),interval%):
  18266. 4*6      
  18267. store_string(L$,Lmargin%+L%*interval%+10,
  18268. 4+        
  18269. end_line
  18270. store_rec_num(-2)
  18271. 4.2    
  18272. store_string("Max.nodes "+L1$,Lmargin%,
  18273.     L%=0
  18274.  L%<levels%(fi%)
  18275.       L%+=1   
  18276. 42%      M$=
  18277. padL(
  18278. (2^L%),interval%)
  18279. 436      
  18280. store_string(M$,Lmargin%+L%*interval%+10,
  18281. 44        
  18282. end_line
  18283. 469    
  18284.  PR$="ALL" 
  18285. tree_heading(levels%(fi%)) 
  18286.  "Hourglass_Off"
  18287. tkey%=key%
  18288. screen_list
  18289. write_log(-1,"Tree printed: subfile:"+
  18290. (fi%)+", key:"+
  18291. (key%)+", "+Index$(key%),"")
  18292. tree_heading(levels%)
  18293.  zero%,L%
  18294. store_rec_num(-2)
  18295. store_string("Level No.",Lmargin%,
  18296. padL("0",interval%)
  18297. store_string(L$,Lmargin%+10,
  18298.  L%<levels%
  18299.   L%+=1
  18300.   L$=
  18301. padL(
  18302. (L%),interval%)
  18303. 4I2  
  18304. store_string(L$,Lmargin%+L%*interval%+10,
  18305. end_line
  18306. 4M"count%=
  18307. count_recs(key%,zero%)
  18308. traverse(P%,Z%)
  18309.  string$
  18310. COL%+=1
  18311.  COL%>depth% 
  18312.  depth%=COL%
  18313.  P%<0 
  18314. read_node(keybase%+P%)
  18315.  sym% 
  18316. traverse(L%,Z%):COL%-=1:
  18317. read_node(keybase%+P%)
  18318.   L%(COL%-1)=L%(COL%-1)+1
  18319.  PR$="ALL" 
  18320. store_rec_num(rec%)
  18321.     S$=$(keybase%+P%+8)
  18322.     S$=
  18323. stripright(S$,"#")
  18324.     S$=
  18325. padL(S$,interval%)
  18326. 4^:    
  18327. store_string(S$,Lmargin%+(COL%-1)*interval%+10,
  18328.  sym% 
  18329. traverse(R%,Z%) 
  18330. traverse(L%,Z%)
  18331. COL%-=1
  18332.  sym% 
  18333. read_node(keybase%+P%):
  18334. traverse(R%,Z%):COL%=COL%-1
  18335. read_node(P%)
  18336. 4g*L%=!P%:R%=P%!4:rec%=P%!(8+KL%(key%)+1)
  18337. balance(key%)
  18338.  recptr%,top,file%,I%,N%,A%,max%,done%,highest%,avail%,seglen%,REC%,SHbalptr%,SHflag%
  18339.  recs%(),ptr%()
  18340.  recs%(5),ptr%(5)
  18341. set_keydata(key%)
  18342. 4o-newtree%=
  18343.                                
  18344. seglen%=KL%(key%)+5
  18345. 4qASHrecptr%=
  18346. extend_named_sliding_block(recanchor%,seglen%*RA%)
  18347. 4rASHbalptr%=
  18348. extend_named_sliding_block(balanchor%,seglen%*RA%)
  18349. 4s8SHflag%=
  18350. extend_named_sliding_block(flaganchor%,RA%)
  18351. recptr%=SHrecptr%
  18352.  I%=0 
  18353.  RA%-1
  18354.   SHflag%?I%=255
  18355.  Bytes are changed from 255 to 0 where records are in use
  18356.  "Hourglass_On"
  18357.  file%=0 
  18358.   ptr%(file%)=recptr%
  18359.   top=8*file%+LH%
  18360. 4}.  recs%(file%)=
  18361. count_recs(key%,recptr%)-1
  18362.   max%+=recs%(file%)+1
  18363.  file%
  18364. make_empty_index(RA%,key%,
  18365.  "Hourglass_LEDs",%11
  18366.  file%=0 
  18367.   top=8*file%+LH%
  18368.  recs%(file%)>=0 
  18369.     recptr%=ptr%(file%)
  18370.     N%=1
  18371.         
  18372.       N%=N%+N%
  18373.  N%>recs%(file%)+2
  18374.     step%=N%
  18375.     N%=(N% 
  18376.  2)-1
  18377.     start%=N%
  18378.     C%=0
  18379.         
  18380.       start%=start% 
  18381.       end%=N%-start%-1
  18382.       step%=step% 
  18383. $      
  18384.  I%=start% 
  18385.  end% 
  18386.  step%
  18387. 9        A%=recptr%+seglen%*(I%*(recs%(file%)+1) 
  18388. A        SHbalptr%!C%=!A%:$(SHbalptr%+C%+4)=$(A%+4):!A%=-!A%-1
  18389.         C%+=seglen%
  18390.       
  18391.  step%=2
  18392. %    
  18393.  I%=0 
  18394.  C%-seglen% 
  18395.  seglen%
  18396. 2      REC%=SHbalptr%!I%:KEY$=$(SHbalptr%+I%+4)
  18397.       
  18398. insert(KEY$,key%,
  18399.       done%+=1
  18400. 6      
  18401.  "Hourglass_Percentage",(done%*100) 
  18402.  max%
  18403.  I%=0 
  18404.  recs%(file%)
  18405. #      REC%=recptr%!(seglen%*I%)
  18406.       
  18407.  REC%>=0 
  18408. (        KEY$=$(recptr%+seglen%*I%+4)
  18409.          
  18410. insert(KEY$,key%,
  18411.         done%+=1
  18412. 8        
  18413.  "Hourglass_Percentage",(done%*100) 
  18414.  max%
  18415.       
  18416.  file%
  18417.  "Hourglass_LEDs",%00
  18418. keybase%=SHkeyptr%(key%)
  18419. nodesize%=8+KL%(key%)+1+4
  18420. avail%=!keybase%
  18421.  I%=0 
  18422.  highest%
  18423.  SHflag%?I%=255 
  18424. +    !(keybase%+avail%+8+KL%(key%)+1)=I%
  18425.     avail%+=nodesize%
  18426.  "Hourglass_Off"
  18427. save_keys
  18428. scrap_block(balanchor%)
  18429. scrap_block(flaganchor%)
  18430. scrap_block(recanchor%)
  18431. newtree%=
  18432. asterisk(
  18433. write_log(-1,"Index "+Index$(key%)+" balanced","")
  18434. duplicates(key%)
  18435.  P$,S$,RP$,RS$,addr,top,RP%,RS%,count%,examined%,file%,zero%
  18436. abort_dup:
  18437. print_init("W")
  18438. format$="dup"
  18439. YTextName$=$database%+".PrintJobs.Dupl"+
  18440. Index$(key%),5)+
  18441. (file%):$SaveName%=TextName$
  18442. "LenLine%=Lmargin%+KL%(key%)+21
  18443.  LenLine%<Lmargin%+26 
  18444.  LenLine%=Lmargin%+26
  18445. spacer$,"|")>0 
  18446.  spacer$="|"
  18447. NTab%(2)=14:Tab%(3)=19:maxhead%=0:fspace%=18:hspace%=4*36-18:PrintFields%=3
  18448. end_line
  18449. send_title("Duplicated keys")
  18450. send_title(
  18451.  "Hourglass_On"
  18452.  file%=0 
  18453. send_title($Subfile%(file%))
  18454.   top=8*file%+LH%
  18455. !  addr=
  18456. neighbour(key%,top,1)
  18457. 0  count%=
  18458. count_recs(key%,zero%):examined%=0
  18459.  addr<>top
  18460. $    S$=$(SHkeyptr%(key%)+addr+8)
  18461.     S$=
  18462. stripright(S$,"#")
  18463. /    RS%=!(SHkeyptr%(key%)+addr+9+KL%(key%))
  18464. ;    RS$=
  18465. (RS%):RS$="Record No."+
  18466. (RS$)," ")+RS$+"  "
  18467.  S$<>P$ 
  18468.       P$=S$:RP%=RS%:RP$=RS$
  18469.       
  18470.       
  18471. store_rec_num(RP%)
  18472. *      
  18473. store_string(RP$+P$,Lmargin%,
  18474.       
  18475. store_rec_num(RS%)
  18476. *      
  18477. store_string(RS$+S$,Lmargin%,
  18478.         
  18479.     examined%+=1
  18480. 8    
  18481.  "Hourglass_Percentage",examined%*100 
  18482.  count%
  18483. $    addr=
  18484. neighbour(key%,addr,1)
  18485.  file%
  18486.  "Hourglass_Off"
  18487. screen_list
  18488. abort_dup
  18489.  "Hourglass_Off"
  18490. screen_list
  18491. softerror("",67)
  18492. wimp_error(
  18493.  Index handling ------------------------------------------------------
  18494. neighbour(key%,addr%,d%)
  18495.  R%,S%,p%,keybase%
  18496. %SHkeyptr%(key%)=!keyanchor%(key%)
  18497. keybase%=SHkeyptr%(key%)
  18498. p%=d%*4
  18499. R%=!(keybase%+addr%+p%)
  18500.  R%<0 
  18501.  =-R%
  18502. p%=4-p%
  18503.   addr%=R%
  18504.   S%=!(keybase%+addr%+p%)
  18505.  S%>0 
  18506.  R%=S%
  18507.  S%<=0
  18508. rec_no(
  18509.  k$,key%,addr%)
  18510. !k$=$(SHkeyptr%(key%)+addr%+8)
  18511. +=!(SHkeyptr%(key%)+addr%+8+KL%(key%)+1)
  18512. scan_marked_subfiles(c$,key%,action%,direc%,currentkey%)
  18513.  file%,top
  18514.  special%(5) 
  18515. (libfunc$+"_function(5)")
  18516.  "Hourglass_On"
  18517.  file%=0 
  18518. selected(queryW%,file%+6) 
  18519.     top=8*file%+LH%
  18520.  currentkey% 
  18521. (      P%=
  18522. neighbour(key%,top,direc%)
  18523. 2      
  18524. scan_file(c$,key%,file%,action%,direc%)
  18525.       
  18526.       kl%=
  18527. (useval$)
  18528. $      P%=
  18529. search(useval$,key%,1)
  18530. G      
  18531.  P%>=0 
  18532.  k$=useval$:
  18533. scan_file(c$,key%,file%,action%,direc%)
  18534.         
  18535.  file%
  18536.  "Hourglass_Off"
  18537.  special%(6) 
  18538. (libfunc$+"_function(6)")
  18539. scan_file(c$,key%,file%,action%,direc%)
  18540.  REC%,examined%,subtotal%,X%,Y%,n$,copy%,I%,base%,zero%,end$
  18541. base%=SHmarkptr%
  18542. n$="0123456789."
  18543.  key%=usekey% 
  18544. 5"-  
  18545.  direc%=1 
  18546.  end$="first" 
  18547.  end$="last"
  18548. 5#T  subtotal%=
  18549. count_matches(end$,"LEFT$($(SHkeyptr%(key%)+P%+8),kl%)=useval$",P%)
  18550. 5%'  subtotal%=
  18551. count_recs(key%,zero%)
  18552. (c$)=
  18553.   REC%=
  18554. rec_no(k$,key%,P%)
  18555. 5)%  
  18556. readsmarray(dbasehandle%,REC%)
  18557.   examined%+=1
  18558. (Search$)=
  18559. 5,5    
  18560.  special%(7) 
  18561. (libfunc$+"_function(7)")
  18562.  action% 
  18563. 5."      
  18564.  ### print/mark ###
  18565.       
  18566.  matchopt% 
  18567. 50&        
  18568. print_record(REC%,P%)
  18569. 51F        
  18570.  SHmarkptr%?REC%=0 
  18571.  SHmarkptr%?REC%=1:MarkedRecs%+=1
  18572. 52G        
  18573.  SHmarkptr%?REC%=1 
  18574.  SHmarkptr%?REC%=0:MarkedRecs%-=1
  18575.       
  18576.       printed%+=1
  18577. 55/      
  18578.  2:ptr%?REC%=file%:
  18579.  ### earmark ###
  18580. 563      
  18581. write_csv_rec(REC%,Form$,csvhandle%)
  18582.       
  18583. 58       
  18584.  ### create index ###
  18585. 597      KEY$=
  18586. key2(newkey%,1):
  18587. insert(KEY$,newkey%,
  18588.       
  18589. 5;!      
  18590.  ### global change ###
  18591.       S$=F$(Menufield%)
  18592.       
  18593. 5>C        
  18594. New$,$ws%)>0:S$=
  18595. wildcard_replace(S$,Old$,New$,$ws%)
  18596. 5?C        
  18597. New$,$wc%)>0:S$=
  18598. wildcard_replace(S$,Old$,New$,$wc%)
  18599.         
  18600.  numeric%:
  18601.         X%=0:Y%=0
  18602.         
  18603.  X%+=1
  18604. 5C)        
  18605. (S$) 
  18606. S$,X%,1))>0
  18607.         
  18608.  X%<=
  18609. (S$) 
  18610.           Y%=X%
  18611.           
  18612.  Y%+=1
  18613. 5G+          
  18614. (S$) 
  18615. S$,Y%,1))=0
  18616.         
  18617. 5I9        S$=
  18618. S$,X%-1)+
  18619. S$,X%,Y%-X%)+New$))+
  18620. S$,Y%)
  18621. 5J*        
  18622.  Old$<>"":
  18623.  S$=Old$ 
  18624.  S$=New$
  18625.         
  18626. :S$=New$
  18627.       
  18628. 5M)      
  18629. (S$)>TextLength% 
  18630.  flag% 
  18631. 5N:        
  18632. softerror(S$+","+Tag$(Menufield%),10):flag%=
  18633.         
  18634.  "Hourglass_On"
  18635.       
  18636. 5Q)      F$(Menufield%)=
  18637. S$,TextLength%)
  18638. 5R*      
  18639. writesmarray(dbasehandle%,REC%)
  18640.       
  18641. 5T:      
  18642.  ### update time-dependent calcs on opening ###
  18643.       
  18644.  I%=1 
  18645.  fields%
  18646.         
  18647.  chartype%(I%) 
  18648. 5W.          
  18649.  21,27,28,32,34,40,45,59,80,81:
  18650. 5XR          
  18651.  $Rf%(I%) holds key legend or other important data. Don't overwrite
  18652.           
  18653. :$Rf%(I%)=F$(I%)
  18654. 5ZI          
  18655.  updatethese% 
  18656. set_now(chartype%(I%),I%):F$(I%)=$Rf%(I%)
  18657.         
  18658.       
  18659. 5]6      
  18660.  update$(0)<>"" 
  18661.  changed%=
  18662. update_calcs(0)
  18663. 5^*      
  18664. writesmarray(dbasehandle%,REC%)
  18665.       
  18666. 5`/      
  18667.  ### assign new sequence numbers ###
  18668.       F$(F%)=sequenceval$
  18669. 5b+      sequenceval$=
  18670. (sequenceval$)+1)
  18671. 5c*      
  18672. writesmarray(dbasehandle%,REC%)
  18673. 5d/      $(SHkeyptr%(key%)+P%+8)=
  18674. key2(key%,1)
  18675. 5e        
  18676. 5g#  P%=
  18677. neighbour(key%,P%,direc%)
  18678. 5h;  
  18679.  "Hourglass_Percentage",(examined%*100) 
  18680.  subtotal%
  18681.   multitask% 
  18682. poll(
  18683. wildcard_replace(S$,Old$,New$,type$)
  18684.  old$,new$,old2$,new2$,c$,L%,P%,R%
  18685.  type$ 
  18686.  $ws%:
  18687. 5rD    
  18688. Old$,1)=$ws% 
  18689. New$,1)=$ws% 
  18690. Old$)=$ws% 
  18691. New$)=$ws%:
  18692. 5s'    old$=
  18693. Old$,2)):new$=
  18694. New$,2))
  18695.     P%=
  18696. S$,old$)
  18697. 5u2    
  18698.  P%>0 
  18699. S$,P%-1)+new$+
  18700. S$,P%+
  18701. (old$))
  18702. 5v(    
  18703. Old$,1)=$ws% 
  18704. New$,1)=$ws%:
  18705. 5w/    old$=
  18706. Old$,2):new$=
  18707. New$,2)::R%=
  18708. (old$)
  18709. 5x.    
  18710. S$,R%)=old$ 
  18711. (S$)-R%)+new$
  18712. 5y$    
  18713. Old$)=$ws% 
  18714. New$)=$ws%:
  18715. 5z*    old$=
  18716. Old$):new$=
  18717. New$):L%=
  18718. (old$)
  18719. 5{*    
  18720. S$,L%)=old$ 
  18721.  S$=new$+
  18722. S$,L%+1)
  18723. 5|(    
  18724. Old$,$ws%)>0 
  18725. New$,$ws%)>0:
  18726. 5}P    P%=
  18727. Old$,$ws%):old$=
  18728. Old$,P%-1):L%=
  18729. (old$):old2$=
  18730. Old$,P%+1):R%=
  18731. (old2$)
  18732. 5~9    P%=
  18733. New$,$ws%):new$=
  18734. New$,P%-1):new2$=
  18735. New$,P%+1)
  18736. *    
  18737. S$,L%)=old$ 
  18738.  S$=new$+
  18739. S$,L%+1)
  18740. 0    
  18741. S$,R%)=old2$ 
  18742. (S$)-R%)+new2$
  18743.  $wc%:
  18744. (Old$)=
  18745. (New$) 
  18746.  P%=1 
  18747. (Old$)
  18748.       c$=
  18749. Old$,P%,1)
  18750. ;      
  18751.  c$<>$wc% 
  18752. S$,P%,1) 
  18753. S$,P%,1)=
  18754. New$,P%,1)
  18755. search(S$,key%,M%)
  18756.  P%,found%,info$,keybase%,rec%,cond$
  18757. keybase%=SHkeyptr%(key%)
  18758. Z%=0:P%=top:ident%=
  18759.   L%=P%
  18760.   P%=!(keybase%+L%+Z%)
  18761.  P%>0 
  18762.     info$=$(keybase%+P%+8)
  18763.      rec%=
  18764. rec_no(k$,key%,P%)
  18765.  P%=-L%:found%=
  18766. (val$+"(S$)="+val$+"LEFT$(info$,kl%)") 
  18767.       
  18768.  0:ident%=(key%=0)
  18769.       
  18770.  1:found%=
  18771. $      
  18772.  rec%=REC% 
  18773.  found%=
  18774.         
  18775.  found% 
  18776.  Z%=-
  18777. (val$+"(S$)>="+val$+"(info$)")*4
  18778.  found%
  18779. /=P%                                        
  18780.  ### M%=0 - Find leaf position at which to insert ###
  18781.  ### M%=1 - Find first match in tree (if there is one) ###
  18782.  ### M%=2 - Find exact matching record, checking for record no. ###
  18783. insert(
  18784.  S$,key%,dupwarn%)
  18785.  P%,avail%,kl%,keybase%,abort%
  18786.  Index$(key%)="" 
  18787.  Index deleted
  18788.  S$="" 
  18789.  null%(key%)=
  18790. keybase%=SHkeyptr%(key%)
  18791. "kl%=KL%(key%):val$=
  18792. type(key%)
  18793. search(S$,key%,0)
  18794.  ident% 
  18795. !    
  18796. selected(passW%,15):
  18797. "    
  18798. softerror(S$,37):abort%=
  18799.  dupwarn% 
  18800. 4      
  18801. confirm(
  18802. msg("Err45,"+S$)) 
  18803.  abort%=
  18804.       
  18805.  duplicates%+=1
  18806.  abort% 
  18807.  S$="*Failed*":
  18808. nextfree%=!keybase%
  18809.  !(keybase%+nextfree%)<=0 
  18810.   incr%=
  18811. ($Increment%)
  18812.  incr%>0 
  18813. #    
  18814. change_length(RA%+incr%,
  18815.  S$="*Failed*"
  18816.  S$="*Failed*" 
  18817. softerror("",2):
  18818.  avail%=!(keybase%+nextfree%)
  18819. .!(keybase%+nextfree%+Z%)=!(keybase%+P%+Z%)
  18820. $!(keybase%+nextfree%+(4-Z%))=-P%
  18821. $(keybase%+nextfree%+8)=S$
  18822. ,!(keybase%+nextfree%+8+KL%(key%)+1)=REC%
  18823. !(keybase%+P%+Z%)=nextfree%
  18824. !keybase%=avail%
  18825.  key%=0 
  18826.  RU%+=1
  18827. delete(
  18828.  S$,key%)
  18829.  P%,A%,kl%,keybase%
  18830.  Index$(key%)="" 
  18831.  Index deleted
  18832.  S$="" 
  18833.  null%(key%)=
  18834. keybase%=SHkeyptr%(key%)
  18835. A%=!keybase%
  18836. "kl%=KL%(key%):val$=
  18837. type(key%)
  18838. search(S$,key%,2)
  18839.  P%<0 
  18840. softerror(S$+","+Index$(key%),1):S$="*Failed*":
  18841. neighbour(key%,P%,0)
  18842. neighbour(key%,P%,1)
  18843. '!(keybase%+L%+Z%)=!(keybase%+P%+Z%)
  18844.     Q%=P%
  18845. ZL%=4-Z%
  18846. P1%=!(keybase%+P%+ZL%)
  18847.  P1%>0 
  18848.   info$=$(keybase%+P1%+8)
  18849.   P%=-
  18850. search(info$,key%,0)
  18851.   !(keybase%+P%+Z%)=P1%
  18852.  !(keybase%+PR%+4)<=0 
  18853.  !(keybase%+PR%+4)=-SU%
  18854.  !(keybase%+SU%+0)<=0 
  18855.  !(keybase%+SU%+0)=-PR%
  18856. !(keybase%+Q%)=A%
  18857. !keybase%=Q%
  18858.  key%=0 
  18859.  RU%-=1
  18860. save_keys
  18861.  keyN%
  18862.  present%<>7 
  18863.  "Hourglass_On"
  18864. refresh_dates
  18865. 3keybase%=SHkeyptr%(0):keybase%!4=
  18866. ($Increment%)
  18867.  SHkeyptr%(keyN%)>0
  18868.   keybase%=SHkeyptr%(keyN%)
  18869. 8  filelength%=
  18870. sliding_block_size(keyanchor%(keyN%))
  18871.  keyN%=0 
  18872.     index$=""
  18873.  index$="Indices."
  18874.  Index$(keyN%)<>"" 
  18875.  "OS_File",10,$database%+"."+index$+Index$(keyN%),&7F0,,keybase%,keybase%+filelength%
  18876.   keyN%+=1
  18877.  "Hourglass_Percentage",keyN%*100 
  18878.  (Keys%+1)
  18879.  "Hourglass_Off"
  18880. readsmarray(filehandle%,REC%)
  18881.  loop%
  18882.  "OS_Byte",229,1:
  18883.  "OS_Byte",124
  18884. #filehandle%=REC%*Length%
  18885. F$()=""
  18886.  loop%=1 
  18887.  fields%
  18888.  zerolen%?loop%=0 
  18889.  F$(loop%)=
  18890. #filehandle%
  18891.  loop%
  18892.  "OS_Byte",229,0
  18893.  special%(2) 
  18894. (libfunc$+"_function(2)")
  18895. writesmarray(F,
  18896.  loop%,F$,L%
  18897. #F=R%*Length%
  18898.  loop%=1 
  18899.  fields%
  18900. !  F$=F$(loop%):L%=len%(loop%)
  18901.  zerolen%?loop%=0 
  18902. +    
  18903. (F$)<=L% 
  18904. #F,F$ 
  18905. L%,"!")
  18906.  loop%
  18907.     R%+=1
  18908.  special%(4) 
  18909. (libfunc$+"_function(4)")
  18910. check_save(T%)
  18911.  T%=0 
  18912. SaveCount%+=1
  18913.  SaveCount%*ReturnEvery%<T%*6000 
  18914.  buttonfield%(0,19)>0 
  18915.  wi%=mainW%:ic%=field%(buttonfield%(0,19)) 
  18916.  wi%=keypadW%:ic%=19
  18917.  autosave% 
  18918.   delay%=
  18919.  loop%=0 
  18920. invert(wi%,ic%)
  18921.     delay%+=50
  18922. >delay%
  18923.  1,-10,100,10
  18924. invert(wi%,ic%)
  18925.     delay%+=50
  18926. >delay%
  18927.  loop%
  18928.  undo%=2 
  18929. 6($    
  18930. confirm(
  18931. msg("Err166")) 
  18932.       
  18933. invert(wi%,ic%)
  18934.       
  18935. mouse(0,0,4,wi%,ic%)
  18936.       
  18937. invert(wi%,ic%)
  18938.       undo%=0
  18939. 6-        
  18940. 6.      
  18941. SaveCount%=0
  18942.  Calculations ---------------------------------------------------------
  18943. calc_link(T$,type%)
  18944.  ### Sets up calculation formula window & menu entry ###
  18945. $CalcFunc%=T$
  18946.  I%=1 
  18947.   T$=
  18948. $CalcTitle%=T$
  18949. split_link(Fieldnumber%,real$,visible$)
  18950.  type% 
  18951.  6,7:
  18952. 6?0  $CalcForm%=Tag$(Fieldnumber%)+"="+visible$
  18953. 6@+  
  18954. shade(calcW%,2,
  18955. shade(calcW%,4,
  18956.   $CalcForm%=visible$
  18957. 6C+  
  18958. shade(calcW%,2,
  18959. shade(calcW%,4,
  18960. deselect(calcW%,2)
  18961. redraw_icon(calcW%,0)
  18962. OldField%=Fieldnumber%
  18963. set_up_calc(wi%,calc%)
  18964.  Ecalc%=10 
  18965.  moan_err%,
  18966. msg("Err211")
  18967. text(wi%,0)=ephemera$(calc%,0):
  18968. redraw_icon(wi%,0)
  18969. text(wi%,1)=ephemera$(calc%,2):
  18970. redraw_icon(wi%,1)
  18971. text(wi%,11)=
  18972. (calc%):
  18973. redraw_icon(wi%,11)
  18974. deselect(wi%,
  18975. selected_esg(wi%,1))
  18976.  calc%=Ecalc% 
  18977. text(wi%,14)="15"
  18978. text(wi%,6)="Include"
  18979. select(wi%,2)
  18980. 6U'  $
  18981. text(wi%,14)=ephemera$(calc%,3)
  18982. text(wi%,6)="Modify"
  18983. 6W,  
  18984. select(wi%,
  18985. (ephemera$(calc%,4))-252)
  18986. redraw_icon(wi%,14)
  18987. redraw_icon(wi%,6)
  18988. set_caret(0,wi%,0)
  18989. extra_calcs(wi%,ic%,b%)
  18990.  z%,I%,V%,F%,vis$,real$,F$,sp$
  18991. b%=b% 
  18992.  (%111)
  18993.  b%=4 
  18994.  z%=1 
  18995.  z%=-1
  18996.  ic% 
  18997. 6c.  
  18998.  15,16:
  18999.  ic%=15 
  19000.  calc%+=z% 
  19001.  calc%-=z%
  19002.  calc%>Ecalc% 
  19003.  calc%=0
  19004.  calc%<0 
  19005.  calc%=Ecalc%
  19006. set_up_calc(wi%,calc%)
  19007.  2,3:
  19008. 6hE  
  19009. selected(wi%,2) 
  19010. text(wi%,14)="15" 
  19011. text(wi%,14)="255"
  19012. redraw_icon(wi%,14)
  19013.  b%=2 
  19014.  b%=4 
  19015. 6l&    fieldsM%=
  19016. field_menu(items%,1)
  19017. 6m+    
  19018. show_pop_up_menu(fieldsM%,wi%,ic%)
  19019.   fieldfunc$="calc"
  19020. 6p6  
  19021. close_window(wi%):
  19022. restore_caret(returnto%)
  19023. 6q4  
  19024. clear_selection:
  19025. set_up_calc(wi%,Ecalc%)
  19026.   F%=MaxFields%+3+calc%
  19027. 6t&  
  19028. selected(wi%,2) 
  19029.  V%=6 
  19030.  V%=7
  19031. 6u   len%(F%)=
  19032. text(wi%,14))
  19033. 6v&  ephemera$(calc%,3)=
  19034. (len%(F%))  
  19035.   vis$=$
  19036. text(wi%,0)
  19037. 6x,  
  19038.  vis$="" 
  19039.  moan_err%,
  19040. msg("Err212")
  19041. 6y$  real$=
  19042. real_calc(vis$,V%,"F$")
  19043. 6z=  
  19044.  V%=6 
  19045.  real$="FNjustify(STR$("+real$+"),N%+1,N%,sp$)"
  19046. 6{      
  19047. 6|/  
  19048. calc_error(F$,F%,vis$,real$):
  19049. 6}1  F$()="107":
  19050.  Avoid 'division by zero' error
  19051. 6~:  F$=
  19052. (real$):
  19053.  Test to see if formula contains errors
  19054.   F$()=""
  19055. 6  ephemera$(calc%,0)=vis$:ephemera$(calc%,1)=real$
  19056. :  Tag$(F%)=$
  19057. text(wi%,1):
  19058.  Tag$(F%)="" 
  19059.  Tag$(F%)=vis$
  19060. !  ephemera$(calc%,2)=Tag$(F%)
  19061. 7  chartype%(F%)=248+V%:ephemera$(calc%,4)=
  19062. (248+V%)
  19063.  calc%=Ecalc% 
  19064. 3    
  19065. (-1) 
  19066.  F$="Y"+
  19067. (calc%) 
  19068.  F$="X"+
  19069. (calc%)
  19070. B    
  19071.  Determines whether output is concatenated (Y) or not (X)
  19072.     printorder$+=F$
  19073.     Ecalc%+=1
  19074. 0    
  19075.  1:calc%=Ecalc%:
  19076. set_up_calc(wi%,calc%)
  19077. =    
  19078. close_window(wi%):
  19079. set_caret(0,mainW%,returnto%)
  19080. shade(matchW%,7,printorder$<>"")
  19081. lit(printM%,9,printorder$<>"")
  19082. calc_formula(F%,wi%,ic%,b%,S$)
  19083.  ### Parses calculation formula (S$) & builds calc$(F%) ###
  19084.  C$,F$,N%
  19085. b%=b% 
  19086.  (%111)
  19087.  S$="" 
  19088.  calc$(F%)=""
  19089.  ic% 
  19090. close_window(wi%):
  19091. restore_caret(returnto%)
  19092.  b%=2 
  19093.  b%=4 
  19094. &    fieldsM%=
  19095. field_menu(items%,1)
  19096. +    
  19097. show_pop_up_menu(fieldsM%,wi%,ic%)
  19098.   fieldfunc$="calc"
  19099. #  C$=
  19100. ~(F%):
  19101.  F%<16 
  19102.  C$="0"+C$
  19103.  $CalcFunc%="Set base value..." 
  19104. split_link(F%,R$,V$)
  19105. (S$)>=
  19106. (R$) 
  19107.       
  19108.  S$="" 
  19109.  S$="0"
  19110.       calc$(F%)=S$+"|"+S$
  19111.       calc$(0)="LOADED"
  19112.       
  19113. display(key%,-1)
  19114.       
  19115. softerror(R$,209)
  19116.         
  19117.         
  19118. &    P%=
  19119. S$,"="):visible$=
  19120. S$,P%+1)
  19121. 4    S$=
  19122. real_calc(visible$,chartype%(F%),"$Rf%")
  19123. 2    
  19124. calc_error(F$,F%,visible$,S$):
  19125.  S$<>"" 
  19126. 1      
  19127.  chartype%(F%)=6 
  19128. (S$) 
  19129.         
  19130. #    
  19131. (S$)+
  19132. (visible$)+2<256 
  19133. '      calc$(F%)="#"+S$+"#"+visible$
  19134.       calc$(0)="LOADED"
  19135. /      
  19136. selected(wi%,2) 
  19137. recalculate(F%)
  19138.       
  19139. softerror("",44)
  19140.         
  19141.   F%=0:
  19142. deselect(wi%,2)
  19143. asterisk(
  19144.  b%=4 
  19145. close_window(wi%)
  19146. real_calc(S$,V%,ar$)
  19147.  I%,P%,L%,t$,s$,f$,ok$,cl$,cr$,time%,date%,user%,ok%
  19148. ar$+="("
  19149. ok$="(),.+-*/=<> "
  19150.  I%=fields% 
  19151.  vtype$(chartype%(I%))<>"O" 
  19152. !    t$=Tag$(I%):L%=
  19153. (t$):P%=0
  19154.  t$<>"" 
  19155.       f$=ar$+
  19156. (I%)+")"
  19157.       
  19158. %        user%=(
  19159. S$,"FNU",P%+1)>0)
  19160. )        P%=
  19161. S$,t$,P%+1):cl$="":cr$=""
  19162.         
  19163.  P%>0 
  19164. .          cl$=
  19165. S$,P%-1,1):cr$=
  19166. S$,P%+L%,1)
  19167.           
  19168. C            
  19169.  Check that located tag isn't substring of another
  19170.             
  19171.  S$=t$:ok%=
  19172. 0            
  19173. S$,L%)=t$ 
  19174. ok$,cr$)>0:ok%=
  19175. 0            
  19176. S$,L%)=t$ 
  19177. ok$,cl$)>0:ok%=
  19178. 1            
  19179. ok$,cl$)>0 
  19180. ok$,cr$)>0:ok%=
  19181.             
  19182. :ok%=
  19183.           
  19184. )          
  19185.  ok% 
  19186.  chartype%(I%)<>33 
  19187.             s$=f$
  19188. "            
  19189.  chartype%(I%) 
  19190. 6              
  19191.  3,6,46,47,54,56,57,74,75,77,78,79:
  19192. A              
  19193.  user% 
  19194.  s$="VAL("+f$+")":
  19195.  Treat as numbers
  19196. I              
  19197.  5,50,51,70,71:
  19198.  user% 
  19199.  s$="FNdays("+f$+")":date%=
  19200. F              
  19201.  8,48,68:
  19202.  user% 
  19203.  s$="FNseconds("+f$+")":time%=
  19204.               
  19205.               
  19206. v                
  19207.  user% 
  19208.  s$="FNn("+
  19209. (I%)+")":
  19210.  If not in user func. assume no. from next col. of val. table
  19211.               
  19212.             
  19213. *            S$=
  19214. S$,P%-1)+s$+
  19215. S$,P%+L%)
  19216. /            
  19217.  ar$="$Rf%(" 
  19218.  update$(I%)+=C$
  19219.           
  19220.         
  19221.       
  19222.  P%=0
  19223.         
  19224. S$,"TIME$")>0 
  19225.  ar$="$Rf%(" 
  19226.  update$(0)+=C$
  19227.  time%=
  19228.  V%=7 
  19229.  S$="FNtime("+S$+")"
  19230.  date%=
  19231.  V%=7 
  19232.  S$="FNdate("+S$+","+
  19233. (len%(F%))+")"
  19234. recalculate(F%)
  19235.  F,I%,R%,k$,P%,real$,visible$,subtotal%,zero%,examined%
  19236. calc_error(F$,F%,visible$,real$):
  19237. split_link(F%,real$,visible$)
  19238. 'visible$=
  19239. replace(visible$,",","\")
  19240. confirm(
  19241. msg("Err206,"+Tag$(F%)+","+visible$))=
  19242. %subtotal%=
  19243. count_recs(key%,zero%)
  19244.  "Hourglass_On"
  19245. *dbasehandle%=
  19246. ($database%+".Database")
  19247. neighbour(key%,top,1)
  19248.  P%<>top
  19249.   R%=
  19250. rec_no(k$,key%,P%)
  19251. readsmarray(dbasehandle%,R%)
  19252.  I%=1 
  19253.  fields%
  19254. -    
  19255.  chartype%(I%)<>40 
  19256.  $Rf%(I%)=F$(I%)
  19257.  chartype%(F%) 
  19258.     F=
  19259. (real$):F$=
  19260. +    
  19261.  fix%(F%)>0 
  19262. fix_point(F$,F%)
  19263.  7:F$=
  19264. (real$)
  19265. (F$)<=len%(F%) 
  19266.  F$(F%)=F$
  19267. 7    $  
  19268. writesmarray(dbasehandle%,R%)
  19269.   P%=
  19270. neighbour(key%,P%,1)
  19271.   examined%+=1
  19272.  "Hourglass_Percentage",examined%*100 
  19273.  subtotal%
  19274.  "Hourglass_Off"
  19275. close_file(dbasehandle%)
  19276.  I%=1 
  19277.  fields%
  19278.  chartype%(I%) 
  19279. "    
  19280.  21,27,28,32,34,40,45,59:
  19281. M    
  19282.  $Rf%(I%) holds key legend or other important data. Don't overwrite!
  19283. :$Rf%(I%)=field$(I%)
  19284. display(key%,addr)
  19285. asterisk(
  19286. save_calcs
  19287.  calc$(0)="LOADED" 
  19288. ($database%+".Calc")
  19289.  F%=1 
  19290.  fields%
  19291. #F,calc$(F%)
  19292. close_file(F)
  19293. sums(
  19294.  F$,F%,type%)
  19295.  F$<>"" 
  19296.  type% 
  19297.  8:V=
  19298. seconds(F$)
  19299.   Sum(F%,0)+=1
  19300.   Sum(F%,1)+=V
  19301.   Sum(F%,3)+=V*V
  19302. 71!  
  19303.  V>Sum(F%,4) 
  19304.  Sum(F%,4)=V
  19305. 72!  
  19306.  V<Sum(F%,5) 
  19307.  Sum(F%,5)=V
  19308. ctotals(flag%)
  19309.  F%,I%,J%,N%,R%,S%,pos%,F$,last%,sp$,N
  19310. last%=
  19311. (Form$)-1
  19312.  I%=1 
  19313.  last% 
  19314.   F%=
  19315. fnum(
  19316. Form$,I%,2))
  19317.   R%=calcrow%?F%
  19318.  chartype%(F%) 
  19319. 7=.    
  19320.  3,6,8,46,47,54,56,57,74,75,77,78,79:
  19321.  Sum(R%,0)>0 
  19322. 7?'      Sum(R%,2)=Sum(R%,1)/Sum(R%,0)
  19323. 7@+      N=Sum(R%,3)/Sum(R%,0)-Sum(R%,2)^2
  19324. 7A.      
  19325.  N>0 
  19326.  Sum(R%,3)=
  19327.  Sum(R%,3)=0
  19328. 7B        
  19329. 7C'    
  19330.  Sum(R%,5)=10^30 
  19331.  Sum(R%,5)=0
  19332.  J%=0 
  19333. 7GF  
  19334.  flag%=TRUE means that first field in list is involved in calcs
  19335.  flag% 
  19336. 7I<    N%=0:start%=1:F$=
  19337. justify(S$(J%),1,0," ")+" ":pos%=0
  19338. 7J/    
  19339.  N%=1:start%=3:F$=S$(J%):pos%=Lmargin%
  19340. store_string(F$,pos%,
  19341. (Form$)>2 
  19342.  start%=1 
  19343.  I%=start% 
  19344.  last% 
  19345. 7O+      
  19346.  I%<last% 
  19347.  sp$=spacer$ 
  19348.  sp$=""
  19349. 7P&      F%=
  19350. fnum(
  19351. Form$,I%,2)):F$=""
  19352.       N%+=1
  19353.       
  19354.  chartype%(F%) 
  19355. 7S2        
  19356.  3,6,8,46,47,54,56,57,74,75,77,78,79:
  19357.         R%=calcrow%?F%
  19358. 7UQ        
  19359.  chartype%(F%)=8 
  19360.  result$=
  19361. time(Sum(R%,J%)) 
  19362.  result$=
  19363. (Sum(R%,J%))
  19364. 7VZ        
  19365. selected(numscrollW%,R%*8-6+J%) 
  19366. justify(result$,N%+1,N%,sp$):f%(J%)=1
  19367.       
  19368. 7X&      
  19369. store_string(F$,Tab%(N%),
  19370.  f%(J%)=1 
  19371.       
  19372. store_rec_num(-1)
  19373.       
  19374. end_line
  19375. 7]        
  19376. (f%())>0 
  19377.  format$="horiz" 
  19378.  $TextPtr%=
  19379. 8," "):
  19380. margin_check
  19381.  f%,F%,R%,J%
  19382. fnum(
  19383. Form$,2))
  19384.  chartype%(F%) 
  19385. 7g*  
  19386.  3,6,46,47,54,56,57,74,75,77,78,79:
  19387.   R%=calcrow%?F%
  19388.  J%=0 
  19389. 7j2    
  19390. selected(numscrollW%,R%*8-6+J%) 
  19391.  f%=F%
  19392.  f%>0 
  19393.  Lmargin%=8:Tab%(0)=0:Tab%(1)=Lmargin%:=
  19394. justify(f$,x%,x1%,s$)
  19395. L%=Tab%(x%)-Tab%(x1%)-
  19396. (f$)>L% 
  19397.   f$=
  19398. f$,L%)
  19399. (f$)," ")+f$
  19400. f$)="." 
  19401.  f$=" "+
  19402. execute_file(F%)
  19403.  S$,file$,d%,F
  19404. link$(F%),1)="@" 
  19405.   file$=
  19406. link$(F%),2)
  19407. 7}*  file$=
  19408. filename(file$,"PrintRes",-1)
  19409. 7~&  
  19410.  "OS_File",5,file$ 
  19411.  d%,,type%
  19412.   type%=(type%>>8) 
  19413.  &fff
  19414.  type%=&fff 
  19415. (file$):S$=
  19416. close_file(F)
  19417. ;    
  19418. S$,7)="!SCRIPT" 
  19419. (-1):
  19420. execute_script(file$)
  19421. (    
  19422.  "OS_CLI","Filer_Run "+file$
  19423. execute_script(f$)
  19424.  F,P%,F%,F$,junk$,line$,name$,params$,command$,file$,from$,to$,oscli$,space%,finished%,firstquery%,state%,X%,spr$,z%,input%,cancel%,f%
  19425. selected(printW%,23) 
  19426.  reportdest$="File" 
  19427.  reportdest$="Window"
  19428. abort_script:
  19429.  finished% 
  19430.  cancel%)
  19431.   line$=
  19432.   space%=
  19433. line$," ")
  19434.  space%=0 
  19435.  command$=line$:params$="" 
  19436.  command$=
  19437. line$,space%-1):params$=
  19438. line$,space%+1)
  19439.   P%=
  19440. params$,"\")
  19441.  P%>0 
  19442. 6    name$=
  19443. filename(
  19444. params$,P%-1),"PrintJobs",-1)
  19445.     params$=
  19446. params$,P%+1)
  19447.  name$=""
  19448. $  params$=
  19449. get_input(params$,f%)
  19450.  command$<>"!MESSAGE" 
  19451.  params$=
  19452. u(params$)
  19453.   state%=(params$="ON")
  19454.  command$ 
  19455. @    
  19456.  Do nothing - probably a blank line at end of file
  19457.  "!SCRIPT":
  19458.     ImpCom$=""
  19459.  params$ 
  19460. :      
  19461.  "QUIET":
  19462.  Do nothing. No confirmation required
  19463.       
  19464.  "","POWERBASE":
  19465. >      
  19466. confirm(
  19467. msg("Err68,"+
  19468. leaf(f$))) 
  19469.  finished%=
  19470.       
  19471.  "END":finished%=
  19472.       
  19473. 2      file$=
  19474. filename(params$,"PrintRes",&fff)
  19475. .      
  19476.  file$<>"" 
  19477. execute_script(file$)
  19478.         
  19479. !    
  19480.  "!COMMENT":
  19481.  Do nothing
  19482.  "!MESSAGE":
  19483.  params$<>"" 
  19484.       T%=
  19485. params$))
  19486. $      
  19487.  T%>0 
  19488.  params$=
  19489. params$)
  19490. $      
  19491. inform(
  19492. params$,80),0,T%)
  19493.       
  19494. close_it(informW%)
  19495.         
  19496.  "!SELECTION":
  19497.  params$<>"" 
  19498. 2      file$=
  19499. filename(params$,"PrintRes",&7f3)
  19500.       
  19501.  file$="" 
  19502. 3        
  19503. read_items_from_list(params$,"select")
  19504. $        
  19505. load_selection(file$)
  19506.       
  19507.       
  19508. clear_selection
  19509.         
  19510.  "!PRINTOPTS":
  19511.  params$<>"" 
  19512. 2      file$=
  19513. filename(params$,"PrintRes",&7f5)
  19514. =      
  19515.  file$<>"" 
  19516. get_options(printW%,printerW%,file$)
  19517.       
  19518. ?      
  19519.  "OS_File",5,$database%+".PrintRes.!PrintOpts" 
  19520.       
  19521.  d%=1 
  19522. M        
  19523. get_options(printW%,printerW%,$database%+".PrintRes.!PrintOpts")
  19524.         
  19525. N        
  19526. get_options(printW%,printerW%,"<Pbase$Dir>.Resources.!PrintOpts")
  19527.       
  19528.         
  19529.  "!SUBFILES":
  19530.  ic%=6 
  19531.        
  19532. deselect(queryW%,ic%)
  19533.     params$+=",":I%=0
  19534.         
  19535.       I%+=1
  19536.       P%=
  19537. params$,",")
  19538. 4      par$=
  19539. params$,P%-1):params$=
  19540. params$,P%+1)
  19541. $      
  19542. select(queryW%,
  19543. (par$)+6)
  19544.  params$=""
  19545. -    
  19546.  "!CASE":
  19547. set_icon(queryW%,1,state%)
  19548.  "!QUERY":
  19549. I    
  19550.  (format$="table" 
  19551.  format$="label") 
  19552. selected(printW%,25) 
  19553. >      
  19554.  moan_err%,
  19555. msg("Err208,"+format$+","+reportdest$) 
  19556.       
  19557.       
  19558.  params$<>"" 
  19559. 4        file$=
  19560. filename(params$,"PrintRes",&7f4)
  19561. I        
  19562.  file$<>"" 
  19563.  "OS_File",255,file$,Query% 
  19564.  $Query%=params$
  19565.         
  19566. default_query
  19567.       
  19568. 8      
  19569.  $Query%="" 
  19570.  displayed%=REC% 
  19571.  displayed%=-1
  19572.       Search$=
  19573. parse
  19574.       
  19575.  name$="" 
  19576. L        
  19577.  displayed%=-1 
  19578.  name$=
  19579. query$,NameLength%) 
  19580.  name$="Displayed"
  19581. 4        TextName$=$database%+".PrintJobs."+name$
  19582.         
  19583.  TextName$=name$
  19584.       
  19585.       
  19586.  reportdest$ 
  19587. +        
  19588.  "Window":$SaveName%=TextName$
  19589.         
  19590.  "File":
  19591. C        texthandle%=
  19592. (TextName$):
  19593.  "OS_File",18,TextName$,&fff
  19594.         
  19595.  ImpCom$<>"" 
  19596.           
  19597. -            
  19598.  firstquery%=
  19599. :firstquery%=
  19600. '            
  19601. #texthandle%,ImpCom$
  19602.           
  19603.         
  19604.       
  19605.         
  19606. "    
  19607. do_it(Search$,displayed%)
  19608. "    
  19609.  "!FILTER","!FILTEROPEN":
  19610.  params$<>"" 
  19611. 2      $Query%=params$:Filter$=
  19612. parse:filter%=
  19613.       
  19614. select(keypadW%,22)
  19615. U      
  19616.  field%(buttonfield%(0,22))>0 
  19617. select(mainW%,field%(buttonfield%(0,22)))
  19618. "      addr=
  19619. moveto(key%,top,1)
  19620.       
  19621. *      filter%=
  19622. deselect(keypadW%,22)
  19623. W      
  19624.  field%(buttonfield%(0,22))>0 
  19625. deselect(mainW%,field%(buttonfield%(0,22)))
  19626.         
  19627. Y    
  19628.  command$="!FILTEROPEN" 
  19629. position_window(filterW%,0,0,0,0,0,0):$Query%=params$
  19630.  "!SAVE":
  19631. /    file$=
  19632. filename(params$,"PrintJobs",-1)
  19633. ?    
  19634. save(file$,&fff,SHtextptr%,SHtextptr%+Count%*LenLine%)
  19635.  "!CSV":
  19636.  params$<>"" 
  19637. 2      file$=
  19638. filename(params$,"PrintRes",&7f4)
  19639. G      
  19640.  file$<>"" 
  19641.  "OS_File",255,file$,Query% 
  19642.  $Query%=params$
  19643.       
  19644. default_query
  19645.         
  19646. :    
  19647.  name$="" 
  19648.  name$=$database%+".PrintJobs.CSVfile"
  19649. 6    
  19650.  $Query%="" 
  19651.  displayed%=REC% 
  19652.  displayed%=-1
  19653. $    
  19654. write_csv(name$,displayed%)
  19655.      
  19656.  "!INCLUDE","!EXCLUDE":
  19657. 0    file$=
  19658. filename(params$,"PrintRes",&fff)
  19659. _    
  19660.  file$="" 
  19661. read_items_from_list(params$,"mark") 
  19662. read_keys_from_file(file$,"mark")
  19663.  command$ 
  19664. 8    &      
  19665.  "!INCLUDE":z%=
  19666. :spr$="yes"
  19667. %      
  19668.  "!EXCLUDE":z%=
  19669. :spr$="no"
  19670.         
  19671. /    
  19672. tick(markM%,0,z%):
  19673. tick(markM%,1,
  19674. %    $
  19675. val(markW%,0)="Snull,"+spr$
  19676. warn_of_marks
  19677. 3    
  19678.  "!CLEAR":
  19679. clear_marks(RA%):
  19680. warn_of_marks
  19681.  "!FORMAT":
  19682. 3    
  19683. deselect(printW%,
  19684. selected_esg(printW%,3))
  19685. params$,1) 
  19686.       
  19687.  "V":format$="vert"
  19688.       
  19689.  "T":format$="table"
  19690.       
  19691.  "L":format$="label"
  19692.       
  19693. :format$="horiz"
  19694.         
  19695. set_format(format$)
  19696.  "!DESTINATION":
  19697. 3    
  19698. deselect(printW%,
  19699. selected_esg(printW%,4))
  19700. params$,1) 
  19701. )      
  19702.  "F":ic%=23:reportdest$="File"
  19703. ,      
  19704.  "P":ic%=25:reportdest$="Printer"
  19705. '      
  19706. :ic%=22:reportdest$="Window"
  19707. A      TextName$=$database%+".PrintJobs."+
  19708. query$,NameLength%)
  19709. 8         
  19710. select(printW%,ic%)
  19711. set_dest_sprite
  19712. 8#0    
  19713. shade(printW%,42,
  19714. selected(printW%,25))
  19715. 8$/    
  19716.  "!EXPAND":
  19717. set_icon(printW%,5,state%)
  19718. 8%.    
  19719.  "!DATE":
  19720. set_icon(printW%,11,state%)
  19721. 8&.    
  19722.  "!UPPER":
  19723. set_icon(printW%,6,state%)
  19724. 8'0    
  19725.  "!HEADER":
  19726. set_icon(printW%,28,state%)
  19727. 8(0    
  19728.  "!FOOTER":
  19729. set_icon(printW%,29,state%)
  19730. 8).    
  19731.  "!FIRST":
  19732. set_icon(printW%,4,state%)
  19733. 8*0    
  19734.  "!SHRINK":
  19735. set_icon(printW%,24,state%)
  19736.  "!HEADINGS":
  19737. 8,3    
  19738. deselect(printW%,
  19739. selected_esg(printW%,1))
  19740.  params$ 
  19741.       
  19742.  "D":ic%=2
  19743.       
  19744.  "T":ic%=1
  19745.       
  19746. :ic%=36
  19747. 81        
  19748. select(printW%,ic%)
  19749. 83-    
  19750.  "!TITLE":$
  19751. text(printW%,10)=params$
  19752. 84+    
  19753.  "!PAGE":$
  19754. text(printW%,9)=params$
  19755. 85.    
  19756.  "!SPACER":$
  19757. text(printW%,26)=params$
  19758. 861    
  19759.  "!TEXTWIDTH":$
  19760. text(printW%,18)=params$
  19761.  "!ORIENTATION":
  19762. 887    
  19763. deselect(printerW%,
  19764. selected_esg(printerW%,1))
  19765.  params$ 
  19766. 8:7      
  19767.  "SIDEWAYS","LANDSCAPE":
  19768. select(printerW%,4)
  19769. 8;       
  19770. select(printerW%,3)
  19771. 8<        
  19772.  "!PRINTCOLUMNS":
  19773. 8>7    
  19774. deselect(printerW%,
  19775. selected_esg(printerW%,9))
  19776.  params$ 
  19777. 8@%      
  19778.  "2":
  19779. select(printerW%,81)
  19780. 8A%      
  19781.  "3":
  19782. select(printerW%,85)
  19783. 8B%      
  19784.  "4":
  19785. select(printerW%,86)
  19786. 8C!      
  19787. select(printerW%,80)
  19788. 8E4    
  19789.  "!HEADERFONT":$
  19790. text(printerW%,57)=params$
  19791. 8F2    
  19792.  "!BODYFONT":$
  19793. text(printerW%,71)=params$
  19794.  "!FONTSIZE":
  19795. 8H7    
  19796. deselect(printerW%,
  19797. selected_esg(printerW%,7))
  19798. (params$) 
  19799. 8J#      
  19800. select(printerW%,61)
  19801. 8K$      
  19802. select(printerW%,62)
  19803. 8L$      
  19804. select(printerW%,63)
  19805. 8M$      
  19806. select(printerW%,64)
  19807. 8N(      
  19808. text(printerW%,65)=params$
  19809. 8O        
  19810. 8P6    
  19811.  "!LMARGIN","!RMARGIN","!TMARGIN","!BMARGIN":
  19812. deselect(printerW%,68)
  19813. 8R&    params$=
  19814. change_units(params$)
  19815.  command$ 
  19816.       
  19817.  "!LMARGIN":ic%=14
  19818.       
  19819.  "!RMARGIN":ic%=15
  19820.       
  19821.  "!TMARGIN":ic%=16
  19822.       
  19823.  "!BMARGIN":ic%=18
  19824. 8X        
  19825. 8Y%    $
  19826. text(printerW%,ic%)=params$
  19827. 8Z+    
  19828.  "!PMARGINS":
  19829. select(printerW%,68)
  19830. 8[3    
  19831.  "!LINESPACE":$
  19832. text(printerW%,56)=params$
  19833.  "!TABLE":
  19834.     params$+=","
  19835.  I%=1 
  19836.       P%=
  19837. params$,",")
  19838. 8`4      par$=
  19839. params$,P%-1):params$=
  19840. params$,P%+1)
  19841. 8a"      par$=
  19842. get_input(par$,f%)
  19843.       
  19844.  par$<>"" 
  19845.         
  19846. 8d+          
  19847. text(printerW%,23)=par$
  19848. 8eD          
  19849.  2:par$=
  19850. change_units(par$):$
  19851. text(printerW%,24)=par$
  19852. 8f+          
  19853. text(printerW%,69)=par$
  19854.         
  19855.       
  19856.  "!LABEL":
  19857.     params$+=",":I%=0
  19858. 8l        
  19859.       I%+=1
  19860.       P%=
  19861. params$,",")
  19862. 8o4      par$=
  19863. params$,P%-1):params$=
  19864. params$,P%+1)
  19865. 8p"      par$=
  19866. get_input(par$,f%)
  19867.       
  19868.  par$<>"" 
  19869.         
  19870.           
  19871. 8t=          
  19872. deselect(printerW%,
  19873. selected_esg(printerW%,5))
  19874.           
  19875.  par$ 
  19876. 8v+            
  19877.  "1":
  19878. select(printerW%,28)
  19879. 8w+            
  19880.  "2":
  19881. select(printerW%,29)
  19882. 8x+            
  19883.  "3":
  19884. select(printerW%,30)
  19885. 8y'            
  19886. select(printerW%,53)
  19887.           
  19888. 8{D          
  19889.  2:par$=
  19890. change_units(par$):$
  19891. text(printerW%,32)=par$
  19892. 8|D          
  19893.  3:par$=
  19894. change_units(par$):$
  19895. text(printerW%,34)=par$
  19896. 8}+          
  19897. text(printerW%,51)=par$
  19898. 8~+          
  19899. text(printerW%,52)=par$
  19900. +          
  19901. text(printerW%,55)=par$
  19902. A          
  19903. text(printerW%,78)=par$:
  19904. select(printerW%,39)
  19905. +          
  19906. text(printerW%,40)=par$
  19907. 9          
  19908. set_icon(printerW%,41,(
  19909. u(par$)="ON"))
  19910.         
  19911.       
  19912.  params$=""
  19913. 0    
  19914.  "!COPIES":$
  19915. text(printerW%,45)=params$
  19916. P    
  19917.  "!SORT":$
  19918. text(printW%,44)=params$:
  19919. set_icon(printW%,46,(params$<>""))
  19920.  "!IMPRESSION":
  19921.     P%=
  19922. params$," ")
  19923.  P%>0 
  19924. =      ImpCom$=
  19925. params$,P%-1):modifier$=
  19926. params$,P%+1))
  19927.       
  19928.  modifier$ 
  19929. '        
  19930.  "NOT FIRST":firstquery%=
  19931.       
  19932.       
  19933.  ImpCom$=params$
  19934.             
  19935.  "!DELETE","!MOVE":
  19936. *    
  19937.  command$="!DELETE" 
  19938.  z%=0 
  19939.  z%=1
  19940.  present%=7 
  19941. 3      
  19942. select(searchW%,6):
  19943. deselect(searchW%,5)
  19944. 2      file$=
  19945. filename(params$,"PrintRes",&fff)
  19946. e      
  19947.  file$="" 
  19948. read_items_from_list(params$,"delete") 
  19949. read_keys_from_file(file$,"delete")
  19950. "      addr=
  19951. moveto(key%,top,1)
  19952.         
  19953.  "!INSERT":
  19954.  present%=7 
  19955. 0      subfile%=
  19956. (params$):top=8*subfile%+LH%
  19957.       
  19958. make_new_rec
  19959.       
  19960.  loop%=1 
  19961.  fields%
  19962. )        $Rf%(loop%)=
  19963. #F,len%(loop%))
  19964.       
  19965.       
  19966. write(fields%,key%)
  19967.       top=8*file%+LH%
  19968.       
  19969. asterisk(
  19970.         
  19971.  "!CHANGE":
  19972.  params$<>"" 
  19973.       P%=
  19974. params$,",")
  19975. 2      F$=
  19976. params$,P%-1):params$=
  19977. params$,P%+1)
  19978. *      F%=
  19979. field(X%,F$,
  19980. ):Menufield%=F%
  19981.       P%=
  19982. params$,",")
  19983. 5      from$=
  19984. params$,P%-1):params$=
  19985. params$,P%+1)
  19986.       P%=
  19987. params$,",")
  19988.       
  19989.  P%>0 
  19990. 5        to$=
  19991. params$,P%-1):$Query%=
  19992. params$,P%+1)
  19993.         
  19994.  to$=params$
  19995.       
  19996. '      
  19997. changes(key%,F%,from$,to$,
  19998.         
  19999.  "!OBEY":
  20000.     P%=
  20001. params$," ")
  20002. G    
  20003.  P%>0 
  20004.  oscli$=
  20005. params$,P%):params$=
  20006. params$,P%+1) 
  20007.  oscli$=""
  20008. 0    file$=
  20009. filename(params$,"PrintRes",&feb)
  20010. D    
  20011.  file$<>"" 
  20012.  "OS_CLI",oscli$+file$ 
  20013.  "OS_CLI",params$
  20014. "    
  20015.  "!KEY":
  20016. set_key(params$)
  20017.  "!INDEX":
  20018.  params$="" 
  20019. 2      
  20020. read_items_from_list(Indices$,"remove")
  20021. C      
  20022. read_items_from_list(params$,"index"):Indices$=params$
  20023.         
  20024.  "!STARTAT":
  20025.  params$="" 
  20026. ,      starthere%=field%(
  20027. first_writable)
  20028. 4      
  20029.  $StartHere%=params$:starthere%=
  20030. start_at
  20031.         
  20032. '    
  20033. set_caret(0,mainW%,starthere%)
  20034. softerror(command$,46)
  20035.     finished%=
  20036.  "Hourglass_Smash"
  20037. close_file(F)
  20038. close_it(informW%)
  20039. set_caret(0,mainW%,starthere%)
  20040. get_input(S$,
  20041.  flag%)
  20042. flag%=(
  20043. S$,"?")>0)
  20044. S$)<>"?" 
  20045. $Prompt%=S$:$Params%=""
  20046. position_window(inputW%,0,0,0,0,0,0)
  20047. set_caret(0,inputW%,1)
  20048. poll(
  20049.  input% 
  20050.  cancel% 
  20051.  quit%
  20052. close_it(inputW%)
  20053. set_caret(0,mainW%,starthere%)
  20054. input%=
  20055. :flag%=
  20056. =$Params%
  20057. change_units(params$)
  20058.  ic%,units$
  20059. units$=
  20060. params$,2)
  20061. deselect(printerW%,
  20062. selected_esg(printerW%,8))
  20063.  units$ 
  20064.  "MM":units$="mm":ic%=48
  20065.  "IN":units$="in":ic%=38
  20066.  "PT":units$="pt":ic%=77
  20067. :units$="mm":ic%=48
  20068. select(printerW%,ic%)
  20069. convert_units
  20070. params$=
  20071. (params$))
  20072. =params$
  20073. filename(name$,default$,type%)
  20074.  f$,s$,ftype%,d%,P%
  20075.  name$="":f$=name$
  20076. name$,"::")>0,
  20077. name$,"<"):f$=name$
  20078.  Full pathname (or one using system variable) stored. Leave it alone!  
  20079. name$,".")=0:f$=$database%+"."+default$+"."+name$:
  20080.  Leaf only
  20081. name$,1)="^":f$=$database%+"."+name$:
  20082.  Pathname relative to dbase
  20083.  "Beheaded" pathname. Glue correct head to body!
  20084. $  P%=
  20085. name$,"."):s$=
  20086. name$,P%-1)
  20087.   P%=
  20088. $database%,s$)
  20089.    f$=
  20090. $database%,P%-1)+name$
  20091.  type%=-1 
  20092.  "XOS_File",5,f$ 
  20093.  d%,,ftype%
  20094.  d%=0 
  20095. ftype%=(ftype%>>8) 
  20096.  &fff
  20097.  type%>0 
  20098.  type%<>ftype% 
  20099. read_keys_from_file(f$,action$)
  20100.  F,key$
  20101. close_file(F):
  20102. wimp_error(
  20103.   key$=
  20104.  action$ 
  20105. '    
  20106.  "delete":
  20107. delete_record(key$)
  20108. 9    #    
  20109.  "mark":
  20110. flag_record(key$)
  20111. close_file(F)
  20112. read_items_from_list(list$,action$)
  20113.  Fieldnumber%,P%,X%,L%,item$,sep$,F$
  20114. sep$=",":list$+=sep$
  20115.  action$="select" 
  20116.  printorder$=""
  20117.  list$<>""                                              
  20118.   P%=
  20119. list$,sep$)
  20120.   item$=
  20121. list$,P%-1)
  20122.    item$=
  20123. get_input(item$,f%)
  20124.  item$<>"" 
  20125.     L%=0
  20126.  action$ 
  20127. *      
  20128.  "delete":
  20129. delete_record(item$)
  20130. &      
  20131.  "mark":
  20132. flag_record(item$)
  20133.       
  20134.  "select":
  20135.       
  20136.  item$ 
  20137. 0        
  20138.  "RECORD":
  20139. update_selection(
  20140. ,"00")
  20141. 9 -        
  20142.  "KEY":
  20143. update_selection(
  20144. ,"KK")
  20145. 9!1        
  20146.  "SUBFILE":
  20147. update_selection(
  20148. ,"SF")
  20149.         
  20150. 9#+        Fieldnumber%=
  20151. field(X%,item$,
  20152. 9$#        
  20153. update_selection(
  20154.       
  20155.       
  20156.  "index":
  20157. 9'7      keyfield%()=0:keyfield%(0)=
  20158. field(X%,item$,
  20159.       L%=
  20160. (item$)
  20161.       
  20162.  L%>0 
  20163.         
  20164.           item$=
  20165. item$,2)
  20166.         
  20167. (item$)=0
  20168. 9-#        
  20169.  L%=len%(keyfield%(0))
  20170.       
  20171. 9/J      $
  20172. text(keyW%,12)=item$:$
  20173. text(keyW%,13)="0":$
  20174. text(keyW%,14)="L"
  20175. 90       $
  20176. text(keyW%,15)=
  20177.       
  20178. create_index(key%,
  20179.       
  20180. set_key(item$)
  20181. 93+      
  20182.  "remove":
  20183. remove_index(item$,
  20184. 94        
  20185. 95      
  20186.   list$=
  20187. list$,P%+1)
  20188.  action$="select" 
  20189. select_them(
  20190. delete_record(key$)
  20191. RecF%=
  20192. addr=
  20193. find(key$,0,
  20194.  RecF% 
  20195.  addr=
  20196. shift(z%,0,0)
  20197. flag_record(key$)
  20198.  P%,REC%,k$
  20199. find(key$,0,
  20200.  P%>=0 
  20201.   REC%=
  20202. rec_no(k$,key%,P%)
  20203. 9F&  SHmarkptr%?REC%=1:MarkedRecs%+=1
  20204. abort_script
  20205. close_file(F)
  20206. format$="":reportdest$=""
  20207. softerror("",57)
  20208. wimp_error(
  20209.  "Impulse" handling -----------------------------------------------
  20210. Impulse_command_received(token%,params%,object%)
  20211. 9WDSHImpulseptr%=
  20212. extend_named_sliding_block(transanchor%,SHclaim%)
  20213. 9X4param$=
  20214. getstr(params%):object$=
  20215. getstr(object%)
  20216.  object$="" 
  20217.  object$=
  20218. leaf($database%)
  20219.  token% 
  20220. 9[@  
  20221.  ### GetPathname. Returns full pathname of object ###
  20222. leaf($database%) 
  20223.  object$:
  20224. 9^<    
  20225.  "Impulse_SendMessage",&202,$database%,,,,,mytask%
  20226.  "No data":
  20227. 9`D    
  20228.  "Impulse_SendMessage",&202,"No database open",,,,,mytask%
  20229. 9bT    
  20230.  "Impulse_SendMessage",&202,"Current database is not "+object$,,,,,mytask%
  20231. 9d:  
  20232.  ### Selection. Returns maximum data length ###
  20233.   ClientSep$=
  20234. param$,1)
  20235. 9f@  ClientForm$=
  20236. find_fields(param$,ClientSep$,ClientLengths$)
  20237. 9g>  
  20238.  "Impulse_SendMessage",&202,ClientLengths$,,,,,mytask%
  20239. 9hB  
  20240.  ### ParseQuery. Returns title generated by FNparse ###
  20241. 9i)  $Query%=param$:ClientSearch$=
  20242. parse
  20243. 9j6  
  20244.  "Impulse_SendMessage",&202,Title$,,,,,mytask%
  20245. 9kp  
  20246.  ### GetRecord. Returns data specified in Selection according to criteria specified in ParseQuery ###
  20247. 9l<  datalength%=
  20248. prepare_next_record(param$,SHImpulseptr%)
  20249. 9mV  
  20250.  "Impulse_SendMessage",&202,"Ready to receive?",-1,,,transtag%,mytask%,Length%
  20251.  ### PutRecord ###
  20252. 9oK  
  20253.  "Impulse_SendMessage",&201,"GetRecord",,,,getrec%,my         task%
  20254.  ### ExpandCode ###
  20255.   P%=
  20256. param$," ")
  20257. 9r.  code$=
  20258. param$,P%-1):table$=
  20259. param$,P%+1)
  20260. 9sO  
  20261.  "Impulse_SendMessage",&202,
  20262. expand(code$,table$,L%,SF$,C%),,,,,mytask%
  20263. 9t+  
  20264.  7,8:
  20265.  ### GetField, GetExpanded ###
  20266.  params%<>-1 
  20267. 9v6    datalength%=
  20268. prepare_next_field(token%,param$)
  20269. 9w\    
  20270.  "Impulse_SendMessage",&202,"Ready to receive?",-1,,,transtag%,mytask%,datalength%
  20271. 9x:    
  20272.  ### Max. length for a Powerbase field is 246 ###
  20273.  ### NextMatch ###
  20274.  finished% 
  20275. 9|#    
  20276. move_on_and_continue(key%)
  20277. 9}        
  20278. 9~M    $
  20279. text(mergeW%,6)="Merging complete. Final page will appear shortly."
  20280. redraw_icon(mergeW%,6)
  20281. move_on_and_continue(key%)
  20282.  S$,J%,F%,F1%
  20283. 7addr=
  20284. next_match(addr,direction%,Filter$,finished%)
  20285.  finished% 
  20286.  F$()="":
  20287.  J%=0 
  20288. 8  F1%=KF%(key%,J%):
  20289.  F1%<>F% 
  20290.  F%=F1%:S$+=F$(F%)+" "
  20291. text(mergeW%,6)=
  20292. S$,80):
  20293. redraw_icon(mergeW%,6)
  20294. Impulse_reply(replytag%,reply%)
  20295. abort_merge:
  20296. DSHImpulseptr%=
  20297. extend_named_sliding_block(transanchor%,SHclaim%)
  20298. reply$=
  20299. getstr(reply%)
  20300.  replytag% 
  20301.  getrec%:
  20302.  ### Reply to GetRecord command. ###
  20303.  "Impulse_FetchData",SHImpulseptr%,Length%,,,,,mytask%
  20304.  mergetag%:
  20305.  ### Merging application replies when all data in document merged ###
  20306. selected(mergeW%,3) 
  20307.  "Impulse_SendMessage",&201,":"+$mergewith%+"."+document$+" Print",,,,printtag%,mytask%
  20308. display(key%,addr)
  20309.  printtag%:
  20310.  ### Merging application has printed the current document ###
  20311. 1  mergenum%+=1:$
  20312. text(mergeW%,7)=
  20313. (mergenum%)
  20314. redraw_icon(mergeW%,7)
  20315. selected(mergeW%,3) 
  20316.  finished% 
  20317.  addr=
  20318. moveto(key%,addr,direction%)
  20319. abort_merge
  20320. close_file(dbasehandle%)
  20321. addr=ClientPtr%:merging%=
  20322. deselect(mergeW%,3)
  20323. close_it(mergeW%)
  20324. softerror("",27)
  20325. wimp_error(
  20326. Impulse_send(tag%,maxsize%)
  20327.  send%,flag%
  20328.  tag%<>transtag% 
  20329.  moan_err%,
  20330. msg("Err216"):
  20331.  datalength%>maxsize%:
  20332.   send%=maxsize%
  20333.   datalength%-=maxsize%
  20334.   flag%=
  20335.  datalength%=0 
  20336.  send%=0 
  20337.  send%=maxsize%
  20338.  datalength%<maxsize%
  20339.     transptr%!datalength%=0
  20340.     datalength%+=4
  20341.   datalength%=0  
  20342.  "Impulse_TransmitData",transptr%,send%,,,,,mytask%
  20343.  flag% 
  20344.  transptr%+=send%
  20345. Impulse_receive(replytag%,expected%,received%)
  20346.  I%,F%,P%
  20347. transbuff%=SHImpulseptr%
  20348. transbuff%?received%=13
  20349. data$=$transbuff%
  20350.  ### Acknowledge data received (get reason code 19 otherwise!) ###
  20351.  "Impulse_SendMessage",&202,,,,,replytag%,mytask%
  20352.  data$<>"" 
  20353.   P%=
  20354. data$,"#")
  20355.   REC%=
  20356. data$,P%-1))
  20357.   data$=
  20358. data$,P%+1)
  20359.  REC%=-1 
  20360.  REC%=RA%
  20361. read(
  20362. ,fields%,REC%<>RA%,REC%,$database%)
  20363.  I%=1 
  20364. (ClientForm$) 
  20365. $    F%=
  20366. fnum(
  20367. ClientForm$,I%,2))
  20368. <    
  20369.  data$<>"" 
  20370.  $Rf%(F%)=
  20371. get_string(data$,ClientSep$)
  20372. write(fields%,key%)
  20373.  received%=0 
  20374.  "Impulse_SendMessage",&201,"GetRecord",,,,getrec%,mytask%
  20375. get_string(
  20376.  S$,sep$)
  20377.  P%,F$
  20378. S$,sep$)
  20379.  P%>0 
  20380.   F$=
  20381. S$,P%-1)
  20382.   S$=
  20383. S$,P%+1)
  20384. stripright(F$," ")
  20385. prepare_next_record(key$,transbuff%)
  20386.  ok%,I%,F%,P%
  20387.  dbasehandle%=0 
  20388. ,  dbasehandle%=
  20389. ($database%+".Database")
  20390. '  ClientPtr%=
  20391. neighbour(key%,top,1)
  20392. P%=transbuff%
  20393.  key$ 
  20394.  "***":
  20395. close_file(dbasehandle%)
  20396.   $P%=key$:P%+=
  20397. ($P%)+1
  20398.  ok%=
  20399.  ClientPtr%<>top
  20400. (    REC%=
  20401. rec_no(k$,key%,ClientPtr%)
  20402. '    
  20403. readsmarray(dbasehandle%,REC%)
  20404. (ClientSearch$)=
  20405. $      $P%=
  20406. (REC%)+"#":P%+=
  20407. ($P%)
  20408. %      
  20409.  I%=1 
  20410. (ClientForm$) 
  20411. (        F%=
  20412. fnum(
  20413. ClientForm$,I%,2))
  20414. ,        $P%=F$(F%)+ClientSep$:P%+=
  20415. ($P%)
  20416.       
  20417.       ok%=
  20418.         
  20419. 0    ClientPtr%=
  20420. neighbour(key%,ClientPtr%,1)
  20421.  P%=transbuff% 
  20422. close_file(dbasehandle%)
  20423. "  val$=
  20424. type(key%):kl%=
  20425. (key$)
  20426. %  ClientPtr%=
  20427. search(key$,key%,1)
  20428.  ClientPtr%>=0 
  20429. (    REC%=
  20430. rec_no(k$,key%,ClientPtr%)
  20431. '    
  20432. readsmarray(dbasehandle%,REC%)
  20433. "    $P%=
  20434. (REC%)+"#":P%+=
  20435. ($P%)
  20436. #    
  20437.  I%=1 
  20438. (ClientForm$) 
  20439. &      F%=
  20440. fnum(
  20441. ClientForm$,I%,2))
  20442. *      $P%=F$(F%)+ClientSep$:P%+=
  20443. ($P%)
  20444.     $P%+=ClientSep$:P%+=1
  20445. =P%-transbuff%
  20446. prepare_next_field(method%,S$)
  20447.  C%,L%,F%,P%,len%,T$,F$,V%,R%,b$,k$,SF$,blobloaded%,X%,exp$
  20448.  method%=8 
  20449.   P%=
  20450. S$,",")
  20451.  P%>0 
  20452.  exp$=
  20453. S$,P%):S$=
  20454. S$,P%-1)
  20455. field(X%,S$,
  20456. ):V%=chartype%(F%)
  20457.  0,1,2,3,4,5,6,7,8,46,47,48,49,50,51,52,53,54,55,56,57,58,63,68,69,70,71,72,73,74,75,76,77,78,79:F$=F$(F%):L%=
  20458.  method%=8 
  20459.  link$(F%)<>"" 
  20460. <    F$=
  20461. expand(F$(F%),link$(F%)+exp$,L%,SF$,C%):L%=
  20462.  36,39:
  20463.   R%=
  20464. rec_no(k$,key%,addr)
  20465. -  L%=
  20466. blob_path(
  20467. ,$database%,R%,F%,V%,b$)
  20468.  L%>0 
  20469. 7    SHImpulseptr%=
  20470. claim_page(transanchor%,L%+1024)
  20471. <    
  20472.  "OS_File",255,b$,SHImpulseptr%:SHImpulseptr%?L%=0
  20473.     blobloaded%=
  20474.  41,42,43,61,62:F$=F$(F%):L%=
  20475. no_yes(F%,F$)
  20476.  blobloaded% 
  20477.  $SHImpulseptr%=F$ 
  20478.  SHImpulseptr%?L%=0:L%+=1
  20479. len%=(L%+4) 
  20480.  &FFFFFFFC
  20481.  L%<len%
  20482.   SHImpulseptr%?L%=0
  20483.   L%+=1
  20484. transptr%=SHImpulseptr%
  20485. :(    =len%
  20486. start_merge(wi%)
  20487. Impulse_wait%=
  20488. text(wi%,1)=document$
  20489. text(wi%,4)="Merge"
  20490. $Query%=""
  20491. text(wi%,6)="":$
  20492. text(wi%,7)=""
  20493. deselect(wi%,12)
  20494. position_window(wi%,0,0,0,0,0,0)
  20495. set_caret(0,queryW%,0)
  20496. finished%=
  20497. merge_next(filter%,key%,P%)
  20498.  S$,J%,F%,F1%
  20499.  P%=top 
  20500.  finished% 
  20501. selected(mergeW%,3) 
  20502.  filter% 
  20503. :;.    dbasehandle%=
  20504. ($database%+".Database")
  20505. :<#    record%=
  20506. rec_no(k$,key%,P%)
  20507. :=*    
  20508. readsmarray(dbasehandle%,record%)
  20509. :>!    
  20510. close_file(dbasehandle%)
  20511.  J%=0 
  20512. :A:    F1%=KF%(key%,J%):
  20513.  F1%<>F% 
  20514.  F%=F1%:S$+=F$(F%)+" "
  20515. :C7  $
  20516. text(mergeW%,6)=
  20517. S$,80):
  20518. redraw_icon(mergeW%,6)
  20519. :Dd  
  20520.  "Impulse_SendMessage",&201,":"+$mergewith%+"."+document$+" Merge",0,0,0,mergetag%,mytask%,0
  20521.  End of "Impulse" handling -------------------------------------------
  20522.  Import/Export CSV files ---------------------------------------------
  20523. start_import(type$,wi%)
  20524.  T%,F,filename$,S$,fieldinfo%
  20525. filename$=$
  20526. text(csvW%,13)
  20527. :O(F=
  20528. (filename$):S$=
  20529. close_file(F)
  20530. fieldinfo%=(
  20531. S$,"|")>0)
  20532.  fieldinfo%=
  20533.  present%=0 
  20534. softerror("",69):
  20535.  fieldinfo%=
  20536.  present%>0 
  20537. softerror("",172):
  20538.  present%=7 
  20539.  Modify%=
  20540. softerror("",14):
  20541.  "Wimp_GetPointerInfo",,block%:x%=!block%:y%=block%!4
  20542.  T%=0 
  20543.  LastTable%
  20544. :V)  
  20545.  wi%=tableW%(T%) 
  20546.  Tablenumber%=T%
  20547.  wi% 
  20548. :Y   
  20549.  -2:csvfunc$="ImportMain"
  20550. :ZH  
  20551.  present%=0 
  20552. select(csvW%,1):
  20553. select(csvW%,4):
  20554. shade(csvW%,4,
  20555. :[+  
  20556.  mainW%,markW%:csvfunc$="ImportMain"
  20557. :\4  
  20558.  tableW%(Tablenumber%):csvfunc$="ImportTable"
  20559. :]7  
  20560.  scrollerW%(Scroller%):csvfunc$="ImportScroller"
  20561. filename$=$
  20562. text(csvW%,13)
  20563. shade(csvW%,0,
  20564. :a&$CSVTitle%="Import "+type$+" file"
  20565. text(csvW%,9)="Import"
  20566.  wi%=mainW% 
  20567. :d5  
  20568. position_window(csvW%,x%-350,y%-260,0,570,0,0)
  20569. :e+  
  20570. position_window(csvW%,0,0,0,0,0,0)
  20571. auto_csv(on%)
  20572.  R4%,f$,S$,vers%
  20573.  on% 
  20574. :m'  
  20575.  present%=7 
  20576.  $Reformatted%="" 
  20577. :n"    f$=$database%+".PrintJobs"
  20578.  R4%<>-1
  20579. :p8      
  20580.  "OS_GBPB",9,f$,block%,1,R4%,255 
  20581.  ,,S$,,R4%
  20582. :q.      
  20583. S$,7)="NewData" 
  20584.  vers%=
  20585. S$,2))
  20586. :r        
  20587. :s)    f$+=".NewData"+
  20588. (vers%+1),2)
  20589.     autocsvhandle%=
  20590.  "OS_File",18,f$,&dfe
  20591. :v"    
  20592. select_range(1,fields%,
  20593.     csvform$=printorder$
  20594. clear_selection
  20595. :z:  
  20596.  autocsvhandle%>0 
  20597. close_file(autocsvhandle%)
  20598. write_csv(Filename$,displayed%)
  20599.  P%,rec%,examined%,subtotal%,sel$,default% 
  20600.  writingcsv% 
  20601.  printorder$="" 
  20602. ,  sel$=$database%+".PrintRes.!Selection"
  20603.  "OS_File",5,sel$ 
  20604.  default%
  20605.  default%=1 
  20606. load_selection(sel$)
  20607.  printorder$<>"" 
  20608. selected(csvW%,3) 
  20609.  Form$=printorder$ 
  20610. softerror("",34):
  20611. end_csv:
  20612. *s$=$
  20613. text(printW%,26):s%=
  20614. (s$):c$=
  20615.  s%=0:spacer$=s$
  20616.  c$<"0" 
  20617.  c$>"9":spacer$=
  20618. s%,c$)
  20619. :spacer$=
  20620. s%," ")
  20621. )csvhandle%=
  20622. (Filename$):writingcsv%=
  20623. selected(csvW%,1) 
  20624. csv_head
  20625. *dbasehandle%=
  20626. ($database%+".Database")
  20627. Search$=
  20628. parse
  20629. !direc%=
  20630. selected(queryW%,4)+1
  20631.  displayed%>=0:
  20632. readsmarray(dbasehandle%,displayed%)
  20633. write_csv_rec(REC%,Form$,csvhandle%)
  20634.  usekey%=-1,
  20635. selected(savesubW%,6):
  20636. scan_marked_subfiles("P%<>top",key%,3,direc%,
  20637. scan_marked_subfiles("P%<>top AND k$=useval$",usekey%,3,1,
  20638. close_file(csvhandle%)
  20639. close_file(dbasehandle%)
  20640.  "OS_File",18,Filename$,&dfe
  20641. writingcsv%=
  20642. close_it(savesubW%)
  20643.  default%=1 
  20644. clear_selection
  20645. end_csv
  20646.  "Hourglass_Smash"
  20647. close_file(csvhandle%)
  20648. close_file(dbasehandle%)
  20649.  "OS_File",18,Filename$,&dfe
  20650. writingcsv%=
  20651. softerror("",41)
  20652. wimp_error(
  20653. csv_head
  20654.  I%,F%,f$,H$,Head$,N%
  20655.     I%=-1
  20656. (Form$)-1
  20657. (  I%+=2:F%=
  20658. fnum(
  20659. Form$,I%,2)):N%+=1
  20660. selected_esg(printW%,1) 
  20661.  1:Head$=Tag$(F%)
  20662. ,    
  20663.  2:Head$=$
  20664. text(mainW%,(desc%(F%)))
  20665.  36:Head$=""
  20666. selected(csvW%,4) 
  20667.  Head$=
  20668. (chartype%(F%))+"|"+
  20669. (len%(F%))+"|"+$
  20670. text(mainW%,(desc%(F%)))+"|"+Tag$(F%)
  20671.  chartype%(F%)<>3 
  20672.  chartype%(F%)<>6 
  20673. selected(csvW%,0) 
  20674.  Head$=""""+Head$+""""
  20675.  N%>1 
  20676.  Head$=sep$+Head$
  20677. #csvhandle%,Head$;
  20678. #csvhandle%,term$;
  20679. write_csv_rec(R%,Form$,handle%)
  20680.  C%,I%,F%,f$,F$,L%,N%,V%,filename$,len%,base%,SF$,first%,pending%
  20681. selected(csvW%,3) 
  20682.   F$=
  20683. key2(0,1)
  20684.   F$=
  20685. add_quotes(F$)
  20686.  Form$<>"" 
  20687.  F$+=sep$
  20688. #handle%,F$;
  20689. selected(csvW%,22) 
  20690. #handle%,
  20691. (REC%)+sep$;
  20692. I%=-1:L%=
  20693. (Form$)-1
  20694. first%=
  20695.  I%<L%
  20696. "  I%+=2:F%=
  20697. fnum(
  20698. Form$,I%,2))
  20699.  concat% 
  20700.  first%:
  20701. =    F$=F$(F%):
  20702.  F$<>"" 
  20703. selected(csvW%,2) 
  20704.  F$+=spacer$
  20705.     pending%=
  20706. :first%=
  20707.  concat%:
  20708. >    
  20709.  F$(F%)<>"" 
  20710. selected(csvW%,2) 
  20711.  F$+=F$(F%)+spacer$
  20712.     pending%=
  20713.  pending%:
  20714. 6    
  20715.  F$(F%)<>"" 
  20716. selected(csvW%,2) 
  20717.  F$+=F$(F%)
  20718.     pending%=
  20719. :first%=
  20720.     n%=
  20721. (spacer$)
  20722. ,    
  20723. F$,n%)=spacer$ 
  20724. (F$)-n%)
  20725.     N%+=1
  20726. '    
  20727.  F$<>"" 
  20728. selected(csvW%,2) 
  20729.       F$=
  20730. add_quotes(F$)
  20731.       
  20732.  N%>1 
  20733.  F$=sep$+F$
  20734.       
  20735. #handle%,F$;
  20736.         
  20737.     V%=chartype%(F%)
  20738.       
  20739.  36,39:
  20740. .      len%=
  20741. load_blob($database%,R%,F%,36)
  20742. )      
  20743.  len%>0 
  20744. selected(csvW%,2) 
  20745. *        N%+=1:
  20746.  N%>1 
  20747. #handle%,sep$;
  20748. 2        
  20749. selected(csvW%,0) 
  20750. #handle%,"""";
  20751. '        
  20752. blob_to_file(handle%,len%)
  20753. 2        
  20754. selected(csvW%,0) 
  20755. #handle%,"""";
  20756.       
  20757. .      
  20758.  3,6,46,47,54,56,57,74,75,77,78,79:
  20759.       F$=F$(F%):N%+=1
  20760. )      
  20761.  F$<>"" 
  20762. selected(csvW%,2) 
  20763.         
  20764.  N%>1 
  20765.  F$=sep$+F$
  20766.         
  20767. #handle%,F$;
  20768.       
  20769.       
  20770.  41,42,43,61,62:
  20771.         F$=F$(F%):N%+=1
  20772.         Z%=
  20773. no_yes(F%,F$)
  20774.         F$=
  20775. add_quotes(F$)
  20776.         
  20777.  N%>1 
  20778.  F$=sep$+F$
  20779.         
  20780. #handle%,F$;
  20781.       
  20782.  64,65,66,67:
  20783. (      N%+=1:
  20784.  N%>1 
  20785. #handle%,sep$;
  20786. 0      
  20787. selected(csvW%,0) 
  20788. #handle%,"""";
  20789. !      S%=
  20790. scroller_number(F%)
  20791.       pending%(S%)=
  20792.       
  20793.  pending%(S%)
  20794. :        F$=
  20795. read_scroller_row(REC%,F%,S%,V%-63,
  20796. ,sep$)
  20797. )        
  20798. selected_esg(printW%,6) 
  20799.           
  20800. /          
  20801.  pending%(S%) 
  20802.  F$+=scrollterm$ 
  20803.           
  20804. #handle%,F$;
  20805.           
  20806.           
  20807. #handle%,F$;
  20808.           
  20809.  pending%(S%) 
  20810. R            
  20811. selected(csvW%,0) 
  20812. #handle%,""""+sep$+""""; 
  20813. #handle%,sep$;
  20814.           
  20815.         
  20816.       
  20817. 0      
  20818. selected(csvW%,0) 
  20819. #handle%,"""";
  20820.       
  20821. "      
  20822. selected(printW%,5) 
  20823. 4        F$=
  20824. expand(F$(F%),link$(F%),Len%,SF$,C%)
  20825.         
  20826.  F$=F$(F%)
  20827.       
  20828.       N%+=1
  20829. )      
  20830.  F$<>"" 
  20831. selected(csvW%,2) 
  20832.         F$=
  20833. add_quotes(F$)
  20834.         
  20835.  N%>1 
  20836.  F$=sep$+F$
  20837.         
  20838. #handle%,F$;
  20839.       
  20840.         
  20841. #handle%,term$;
  20842. add_quotes(F$)
  20843. selected(csvW%,0) 
  20844. =""""+F$+"""" 
  20845. convert_csv(f$)
  20846.  k$,B%,J%,fld%,S$,sep%,sep2%,term%,term2%,F$,avail%,nextfree%,keybase%,base%,base2%,show%,done%,display%,abort%
  20847.  importingcsv% 
  20848. importingcsv%=
  20849. stop_reading:
  20850. ;&=SHmisc%=
  20851. extend_named_sliding_block(tempanchor%,SHclaim%)
  20852. ;':sep%=
  20853. (sep$):
  20854. (sep$)=2 
  20855.  sep2%=
  20856. sep$)) 
  20857.  sep2%=255
  20858. ;(@term%=
  20859. (term$):
  20860. (term$)=2 
  20861.  term2%=
  20862. term$)) 
  20863.  term2%=255
  20864. csvhandle%=
  20865.  present%=0 
  20866. csv_to_dbase(f$):
  20867.  abort% 
  20868. Form$=
  20869. csv_importform
  20870. ;,3toobighandle%=
  20871. ($database%+".PrintJobs.TooBig")
  20872.  "Hourglass_On"
  20873. ;. display%=
  20874. selected(csvW%,11)
  20875. limit_actions(
  20876. ,multitask%)
  20877. selected(csvW%,24) 
  20878.  addr=top
  20879. ;37    
  20880. selected(csvW%,24):
  20881.  Modify existing records
  20882. ;4$    addr=
  20883. neighbour(key%,addr,1)
  20884. ;5/    
  20885.  addr=top 
  20886.  moan_err%,
  20887. msg("Err131")
  20888. ;6"    REC%=
  20889. rec_no(k$,key%,addr)
  20890. ;71    
  20891. read(display%,fields%,
  20892. ,REC%,$database%)
  20893. ;82    
  20894. selected(csvW%,22):
  20895.  With record number
  20896. read_bytes
  20897.     REC%=
  20898. ($base%)
  20899. ;;1    
  20900. read(display%,fields%,
  20901. ,REC%,$database%)
  20902. ;</    
  20903. selected(csvW%,3):
  20904.  With primary key
  20905. read_bytes
  20906. ;>*    addr=
  20907. find(
  20908. $base%,KL%(key%)),0,
  20909.  addr>0 
  20910. ;@$      REC%=
  20911. rec_no(k$,key%,addr)
  20912. ;A3      
  20913. read(display%,fields%,
  20914. ,REC%,$database%)
  20915.       
  20916. make_new_rec
  20917. ;C        
  20918. make_new_rec
  20919.   endline%=
  20920. :J%=-1
  20921. ;G#  
  20922. (Form$)-2 
  20923.  endline%=
  20924. ;H&    J%+=2:fld%=
  20925. fnum(
  20926. Form$,J%,2))
  20927. ;I!    
  20928. transfer_csv_field(fld%)
  20929. ;KC  
  20930.  fld%<=fields% 
  20931.  (endline% 
  20932. #csvhandle%) 
  20933. next_csv_rec
  20934. write(fields%,key%)
  20935. ;M"  
  20936.  display% 
  20937. redraw(mainW%)
  20938. ;N?  
  20939.  "Hourglass_Percentage",
  20940. #csvhandle%*100 
  20941. #csvhandle%
  20942. #csvhandle%
  20943.  "Hourglass_Off"
  20944. close_file(csvhandle%)
  20945. close_file(toobighandle%)
  20946.  "OS_File",18,$database%+".PrintJobs.TooBig",&fff
  20947. addr=
  20948. moveto(key%,top,1)
  20949. clear_selection
  20950. asterisk(
  20951. write_log(-1,"CSV data imported from file:",f$)
  20952. importingcsv%=
  20953. save_keys
  20954. limit_actions(Access%,multitask%)
  20955. make_new_rec
  20956. ;^-keybase%=SHkeyptr%(0):nextfree%=!keybase%
  20957.  !(keybase%+nextfree%)<=0 
  20958.   incr%=
  20959. ($Increment%)
  20960.  incr%>0 
  20961. ;b#    
  20962. change_length(RA%+incr%,
  20963. ;c1    keybase%=SHkeyptr%(0):nextfree%=!keybase%
  20964. ;d#    
  20965.  moan_err%,
  20966. msg("Err66")
  20967. ;g)REC%=!(keybase%+nextfree%+8+KL%(0)+1)
  20968. read(display%,fields%,
  20969. ,RA%,$database%)
  20970. transfer_csv_field(
  20971.  fld%)
  20972.  C%,L%,P%,Q%,R%,T%,R$,S$,ic%,wi%,p%,z$
  20973.  chartype%(fld%) 
  20974.  64,65,66,67:
  20975. read_bytes
  20976.  ptr%>0 
  20977. ;q4    S%=
  20978. scroller_number(fld%):wi%=scrollerW%(S%)
  20979. ;r8    cols%=scrolldata%(S%,8):icons%=scrolldata%(S%,6)
  20980. ;s(    P%=-1:Q%=base%:T%=
  20981. (scrollterm$)
  20982. ;t        
  20983.       
  20984.         P%+=1
  20985. ;w!      
  20986.  base%?P%=T% 
  20987.  P%=ptr%
  20988. ;x.      base%?P%=13:R$=$Q%+",":Q%=base%+P%+1
  20989.       
  20990.  C%=0 
  20991.  cols%-1
  20992. ;z2        p%=
  20993. R$,sep$):S$=
  20994. R$,p%-1):R$=
  20995. R$,p%+1)
  20996. ;{,        ic%=R%*cols%+C%:L%=sclen%(S%,C%)
  20997. ;|I        
  20998.  ic%=icons%-1 
  20999.  P%<ptr% 
  21000.  icons%=
  21001. add_row(S%,wi%,R%+2,cols%)
  21002. ;}#        $
  21003. text(wi%,ic%)=
  21004. S$,L%)
  21005.       
  21006.       R%+=1
  21007.  P%=ptr%
  21008. "    
  21009. write_scroller(REC%,fld%)
  21010.  36,39:
  21011. read_bytes
  21012.  ptr%>0 
  21013. 3    Z%=
  21014. blob_path(
  21015. ,$database%,REC%,fld%,36,F$)
  21016. $    Start%=base%:End%=base%+ptr%
  21017. "    
  21018. save(F$,&fff,Start%,End%)
  21019.  display% 
  21020.       
  21021.  chartype%(fld%) 
  21022. ?        
  21023. set_blob_sprite(REC%,fld%,chartype%(fld%),z$)
  21024. ,        
  21025. show_text_block(fld%,REC%)
  21026.       
  21027.         
  21028.  41,42,43,61,62:
  21029. read_bytes:c$=
  21030. pos_neg(fld%,$base%)
  21031. F    
  21032.  " ":$Rf%(fld%)=" ":
  21033.  display% 
  21034. select(mainW%,field%(fld%))
  21035. F    
  21036.  "":$Rf%(fld%)="":
  21037.  display% 
  21038. deselect(mainW%,field%(fld%))
  21039.  "@":
  21040. #toobighandle%,"Rec."+
  21041. (REC%)+",Fld."+
  21042. (fld%)+","+$base%+" unsuitable data for check-box":$Rf%(fld%)="":
  21043. deselect(mainW%,field%(fld%))
  21044.  0,1,2,3,4,5,6,7,8,46,47,48,49,50,51,52,53,54,55,56,57,58,60,63,68,69,70,71,72,73,74,75,76,77,78,79:
  21045.  len%(fld%)>0 
  21046. read_bytes
  21047. >    
  21048. selected(csvW%,16) 
  21049.  $base%=
  21050. stripright($base%," ")
  21051.       
  21052.  ptr%<=len%(fld%):
  21053.        
  21054.  chartype%(fld%)=47 
  21055. H        
  21056. selected(csvW%,23) 
  21057.  $Rf%(fld%)=$base%:dontincrement%=
  21058.         
  21059.  $Rf%(fld%)=$base%
  21060.       
  21061.       
  21062.  ptr%<247:
  21063. C      
  21064. #toobighandle%,"Rec."+
  21065. (REC%)+",Fld."+
  21066. (fld%)+","+$base%
  21067.       $Rf%(fld%)="@"
  21068.       
  21069.       
  21070. #toobighandle%,"Rec."+
  21071. (REC%+1)+",Fld."+
  21072. (fld%)+" is more than 246 characters long. Data not saved. External field suggested."
  21073.       $Rf%(fld%)="@"
  21074.         
  21075.  fld%+=1
  21076. 8    
  21077.  ### Zero-length field is probably just a label
  21078. :fld%+=1
  21079.  ### Can't put CSV data into Button, Sprite or Draw fields! ###
  21080.  changed%=
  21081. update_calcs(fld%)
  21082. read_bytes
  21083.  end$,B%
  21084. base%=!tempanchor%
  21085. ptr%=-1
  21086. #csvhandle%
  21087.  B%=34 
  21088. O  end$="(B%=sep% OR B%=term% OR EOF#csvhandle%=TRUE) AND base%?(ptr%-1)=34"
  21089. 7  end$="B%=sep% OR B%=term% OR EOF#csvhandle%=TRUE"
  21090. #csvhandle%=
  21091. #csvhandle%-1
  21092.   B%=
  21093. #csvhandle%
  21094.   ptr%+=1:base%?ptr%=B%
  21095. (end$)
  21096.  base%?(ptr%-1)=34 
  21097.  ptr%-=1
  21098. base%?ptr%=13
  21099.  sep%:
  21100. skip_sep
  21101.  term%:
  21102. skip_term
  21103. next_csv_rec
  21104.   B%=
  21105. #csvhandle%
  21106.  B%=term%
  21107. skip_term
  21108. skip_sep
  21109.  sep2%<>255 
  21110.   B%=
  21111. #csvhandle%
  21112.  B%<>sep2% 
  21113. #csvhandle%=
  21114. #csvhandle%-1
  21115. skip_term
  21116.  term2%<>255 
  21117.   B%=
  21118. #csvhandle%
  21119.  B%<>term2% 
  21120. #csvhandle%=
  21121. #csvhandle%-1 
  21122.  endline%=
  21123.  endline%=
  21124. stop_reading
  21125.  "Hourglass_Off"
  21126. close_file(csvhandle%)
  21127. close_file(toobighandle%)
  21128. close_file(dbasehandle%)
  21129.  "OS_File",18,$database%+".PrintJobs.TooBig",&fff
  21130.  =17 
  21131. softerror("",74)
  21132. wimp_error(
  21133.  present%=7 
  21134.   addr=
  21135. moveto(key%,top,1)
  21136. clear_selection
  21137. importingcsv%=
  21138. limit_actions(Access%,multitask%)
  21139. csv_importform
  21140.  F%,f$,F$,X%,m$
  21141. endline%=
  21142. selected(csvW%,1):
  21143.  ### Use header record to build form ###
  21144. read_bytes
  21145. %    
  21146. selected_esg(printW%,1) 
  21147. -      
  21148.  1:F%=
  21149. field(X%,$base%,
  21150. ):m$="tag"
  21151. 0      
  21152.  2:F%=
  21153. dfield($base%):m$="descriptor"
  21154. )      
  21155.  moan_err%,
  21156. msg("Err136")
  21157. 9    
  21158.  F%=0 
  21159.  moan_err%,
  21160. msg("Err87,"+m$+","+$base%)
  21161.     f$=
  21162. ~(F%)
  21163. (f$)=1 
  21164.  f$="0"+f$
  21165.     F$+=f$
  21166. "    
  21167. invert(mainW%,field%(F%))
  21168.  endline%
  21169.  printorder$<>"":
  21170.  ### Build form from highlighted fields, as in printing ###
  21171.   F$=printorder$
  21172.  ### Assume entry into all fields, beginning with first ###
  21173.  F%=1 
  21174.  fields%
  21175.     f$=
  21176. ~(F%)
  21177. (f$)=1 
  21178.  f$="0"+f$
  21179.     F$+=f$
  21180. csv_to_dbase(f$)
  21181.  F%,L%,LM%,P%,Q%,V%,F,S$,readpos%,width%
  21182.  Desc$()
  21183.  Desc$(MaxFields%)
  21184. read_bytes:S$=$base%:
  21185. #csvhandle%=0
  21186. S$,"|")=0 
  21187.  moan_err%,
  21188. msg("Err89")
  21189. leaf$=
  21190. leaf(f$):csvconv%=
  21191.  $database%="No data" 
  21192.  $database%=leafnamepath$+".!"+leaf$
  21193. save($database%,0,0,0)
  21194. fields%=0:endline%=
  21195.   fields%+=1
  21196. read_bytes:S$=$base%
  21197. 0  V%=
  21198. (S$):P%=
  21199. S$,"|"):S$=
  21200. S$,P%+1):L%=
  21201.  L%>0 
  21202. S$,"|"):S$=
  21203. S$,P%+1)
  21204.  L%=0 
  21205.  L%=V%:V%=0
  21206. < -  chartype%(fields%)=V%:len%(fields%)=L% 
  21207.   P%=
  21208. S$,"|")
  21209.  P%=0 
  21210. <#.    Desc$(fields%)=S$:Tag$(fields%)=
  21211. S$,4)
  21212. <$        
  21213. <%:    Desc$(fields%)=
  21214. S$,P%-1):Tag$(fields%)=
  21215. S$,P%+1,4)
  21216. <'&  L%=
  21217. string_width(Desc$(fields%))
  21218.  L%>LM% 
  21219.  LM%=L%
  21220.  endline%
  21221. ($database%+".Form")
  21222. #F,fields%
  21223.  F%=1 
  21224.  fields%
  21225.   xd%=16:xf%=xd%+LM%
  21226.   yd%=-(F%*52):yf%=yd%
  21227. </@  bbox%=
  21228. guess_width(len%(F%),chartype%(F%),width%)+(48<<16)
  21229. <0K  
  21230. #F,Desc$(F%),Tag$(F%),xd%,yd%,xf%,yf%,len%(F%),chartype%(F%),0,bbox%
  21231. close_file(F)
  21232.  "OS_File",18,$database%+".Form",&7f2
  21233. fields%=0:Fieldnumber%=0
  21234. fields%=
  21235. get_form(Fptr%)
  21236. default_key
  21237. readpos%=
  21238. #csvhandle%
  21239. no_of_recs
  21240. defaults($database%,RA%,0)
  21241.  abort% 
  21242.  present%=0:importingcsv%=
  21243. save_keys
  21244. deselect(csvW%,1)
  21245. csvhandle%=
  21246. #csvhandle%=readpos%
  21247. <?=SHmisc%=
  21248. extend_named_sliding_block(tempanchor%,SHclaim%)
  21249. no_of_recs
  21250.  N%,B%
  21251. #csvhandle%
  21252.  B%=term% 
  21253. #csvhandle%
  21254.   N%+=1
  21255. <H?  
  21256.  "Hourglass_Percentage",
  21257. #csvhandle%*100 
  21258. #csvhandle%
  21259. #csvhandle%
  21260. table_to_csv(T%,Filename$)
  21261.  Rows%,TabFields%,Rec%,offset%,heading%,colours$
  21262. <NUt$=
  21263. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  21264. save_as_csv(Filename$,tableW%(T%),Rows%,TabFields%)
  21265. writetable%=
  21266. scroller_to_csv(S%,f$)
  21267.  wi%,F%,icons%,cols%
  21268. wi%=scrollerW%(S%)
  21269. F%=scrolldata%(S%,0)
  21270. icons%=scrolldata%(S%,6)
  21271. cols%=scrolldata%(S%,8)
  21272. save_as_csv(f$,wi%,icons% 
  21273.  cols%,cols%-1)
  21274. writescroller%=
  21275. save_as_csv(f$,wi%,rows%,cols%)
  21276.  csvhandle%,ic%,row%,column%,F$
  21277. csvhandle%=
  21278. ic%=-1
  21279.  "Hourglass_On"
  21280.  row%=0 
  21281.  rows%-1
  21282.  column%=0 
  21283.  cols%
  21284. <d!    ic%+=1:F$=$
  21285. text(wi%,ic%)
  21286. <e.    
  21287. selected(csvW%,0) 
  21288.  F$=""""+F$+""""
  21289. <f.    
  21290.  column%<cols% 
  21291.  F$+=sep$ 
  21292.  F$+=term$
  21293. #csvhandle%,F$;
  21294.  column%
  21295.  row%
  21296.  "Hourglass_Off"
  21297. close_file(csvhandle%)
  21298.  "OS_File",18,f$,&dfe
  21299. csv_to_table(T%,filename$)
  21300.  ic%,row%,column%,Rows%,TabFields%,Rec%,offset%,heading%,csvhandle%,base%,F$,sep%,sep2%,term%,term2%
  21301. <qUt$=
  21302. table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%(),offset%,heading%,colours$)
  21303. import_csv("T",filename$,tableW%(T%),Rows%,TabFields%)
  21304. csv_to_scroller(S%,filename$)
  21305.  wi%,F%,icons%,cols%
  21306. wi%=scrollerW%(S%)
  21307. F%=scrolldata%(S%,0)
  21308. icons%=scrolldata%(S%,6)
  21309. cols%=scrolldata%(S%,8)
  21310. import_csv("S",filename$,wi%,icons% 
  21311.  cols%,cols%-1)
  21312. ScrollChanged%=
  21313. asterisk(
  21314. import_csv(to$,f$,wi%,rows%,cols%)
  21315.  csvhandle%,sep%,sep2%,term%,term2%,base%,row%,column%,recs%,endline%
  21316. :sep%=
  21317. (sep$):
  21318. (sep$)=2 
  21319.  sep2%=
  21320. sep$)) 
  21321.  sep2%=255
  21322. @term%=
  21323. (term$):
  21324. (term$)=2 
  21325.  term2%=
  21326. term$)) 
  21327.  term2%=255
  21328. =SHmisc%=
  21329. extend_named_sliding_block(tempanchor%,SHclaim%)
  21330. base%=SHmisc%
  21331. csvhandle%=
  21332.  to$="S" 
  21333.   recs%=
  21334. no_of_recs
  21335. #csvhandle%=0
  21336.  recs%>rows% 
  21337.  row%=rows%+1 
  21338.  recs%
  21339. .      icons%=
  21340. add_row(S%,wi%,row%,cols%+1)
  21341.  row%
  21342.     rows%=recs%
  21343.  "Hourglass_On"
  21344.  row%=0 
  21345.  rows%-1
  21346. -  endline%=
  21347. :column%=0:ic%=row%*(cols%+1)
  21348.  column%<=cols% 
  21349.  endline%=
  21350. #csvhandle% 
  21351.       
  21352. read_bytes
  21353. :      $
  21354. text(wi%,ic%)=
  21355. $base%,
  21356. buffer_length(wi%,ic%))
  21357.         
  21358.     column%+=1:ic%+=1
  21359.  (endline% 
  21360. #csvhandle%) 
  21361. next_csv_rec
  21362.  row%
  21363.  "Hourglass_Off"
  21364. close_file(csvhandle%)
  21365. redraw(wi%)
  21366. asterisk(
  21367.  --- SLIDING HEAP 2.00 PROCEDURES
  21368.  requires SlidingHeap 2.00
  21369.  module and PROCs
  21370.  Steven Haslam 1992
  21371. _heap_slotsize
  21372.  "Wimp_SlotSize",-1,-1 
  21373. _heap_pageup(n%)
  21374.  "OS_ReadMemMapInfo" 
  21375. =(n%+R0%-1) 
  21376.  (R0%-1)
  21377. initheaps(heapsize%,slidingblocks%)
  21378. fixedheapsize%=heapsize%
  21379. Lheap_trigger%=
  21380. _heap_pageup(
  21381. +fixedheapsize%+20+20*slidingblocks%-&8000)
  21382. setslotsize(heap_trigger%)
  21383. _heap_slotsize<heap_trigger% 
  21384.  130,"Unable to initialise heap"
  21385. fixedheapbase%=
  21386. %slidingheapbase%=
  21387. +fixedheapsize%
  21388.  "OS_Heap",0,fixedheapbase%,,fixedheapsize%
  21389.  "SlidingHeap_Create",slidingheapbase%,2,slidingblocks%
  21390.  "SlidingHeap_VerifyHeap",slidingheapbase%
  21391. _heap_nextfree
  21392.  nextfree%
  21393.  "SlidingHeap_NextFree",slidingheapbase% 
  21394.  nextfree%
  21395. =nextfree%
  21396. destroyheaps
  21397. setslotsize(
  21398. -&8000)
  21399. _heap_wordup(x%)=(x%+3) 
  21400. create_anchor(name$)
  21401.  space%
  21402.  space% 4+
  21403.  name$+1
  21404. !space%=0
  21405. $(space%+4)=name$
  21406. =space%
  21407. create_named_sliding_block(anchor%,size%)
  21408.  trysize%
  21409. size%=
  21410. _heap_wordup(size%)
  21411. 7trysize%=
  21412. _heap_pageup(
  21413. _heap_nextfree+size%-&7FF4)
  21414.  trysize%>heap_trigger% 
  21415. setslotsize(trysize%)
  21416. _heap_slotsize<trysize% 
  21417. #    
  21418. setslotsize(heap_trigger%)
  21419. D    
  21420.  131,"Not enough room to create block """+$(anchor%+4)+""""
  21421.         
  21422.     heap_trigger%=trysize%
  21423.  "SlidingHeap_NewBlock",slidingheapbase%,anchor%,size%,anchor%+4
  21424.  "SlidingHeap_VerifyHeap",slidingheapbase%
  21425. scrap_block(anchor%)
  21426.  !anchor%=0 
  21427.  "SlidingHeap_ScrapBlock",slidingheapbase%,anchor%
  21428. 1trysize%=
  21429. _heap_pageup(
  21430. _heap_nextfree-&7FFC)
  21431.  trysize%<>heap_trigger% 
  21432. setslotsize(trysize%)
  21433.   heap_trigger%=trysize%
  21434. !anchor%=0
  21435.  "SlidingHeap_VerifyHeap",slidingheapbase%
  21436. setslotsize(newsize%)
  21437.  "Wimp_SlotSize",newsize%,-1
  21438. extend_named_sliding_block(anchor%,newsize%)
  21439.  !anchor%=0 
  21440. create_named_sliding_block(anchor%,newsize%):=!anchor%
  21441.  !anchor%>
  21442. _heap_nextfree 
  21443.  129,"Block beyond heap limits"
  21444. $newsize%=
  21445. _heap_wordup(newsize%)
  21446.  "SlidingHeap_DescribeBlock",slidingheapbase%,anchor% 
  21447.  ,,oldsize%
  21448. larger%=newsize%>oldsize%
  21449.  larger% 
  21450. G  trysize%=
  21451. _heap_pageup(
  21452. _heap_nextfree+(newsize%-oldsize%)-&7FFC)
  21453.  trysize%>heap_trigger% 
  21454. setslotsize(trysize%)
  21455. $    
  21456. _heap_slotsize<trysize% 
  21457. %      
  21458. setslotsize(heap_trigger%)
  21459. =      
  21460.  132,"Not enough room to extend block #"+
  21461. ~anchor%
  21462.       
  21463.        heap_trigger%=trysize%
  21464.         
  21465.  "SlidingHeap_ExtendBlock",slidingheapbase%,anchor%,newsize%
  21466. 1trysize%=
  21467. _heap_pageup(
  21468. _heap_nextfree-&7FFC)
  21469.  trysize%<>heap_trigger% 
  21470. setslotsize(trysize%)
  21471.    heap_trigger%=trysize%
  21472.  "SlidingHeap_VerifyHeap",slidingheapbase%
  21473. =!anchor%
  21474. sliding_block_size(anchor%)
  21475.  size%
  21476.  "SlidingHeap_DescribeBlock",slidingheapbase%,anchor% 
  21477.  ,,size%
  21478. =size%
  21479. claim_page(anchor%,needed%)
  21480.  oldsize%,newsize%
  21481. )oldsize%=
  21482. sliding_block_size(anchor%)
  21483.  needed%>oldsize% 
  21484.   newsize%=oldsize%
  21485.     newsize%+=SHclaim%
  21486.  newsize%>needed%    
  21487. 8  ptr%=
  21488. extend_named_sliding_block(anchor%,newsize%)
  21489. clear_mem(ptr%,oldsize%,newsize%)
  21490. =!anchor%
  21491. clear_mem(ptr%,start%,end%)
  21492.  I%=start% 
  21493.  end%-4 
  21494.   ptr%!I%=&20202020
  21495. print_init(dest$)
  21496.  S%,Z%
  21497. check_record
  21498. =*@SHheadptr%=
  21499. extend_named_sliding_block(headanchor%,SHclaim%)
  21500. =+@SHtextptr%=
  21501. extend_named_sliding_block(textanchor%,SHclaim%)
  21502. =,>SHrecptr%=
  21503. extend_named_sliding_block(recanchor%,SHclaim%)
  21504. clear_mem(SHheadptr%,0,
  21505. sliding_block_size(headanchor%))
  21506. clear_mem(SHtextptr%,0,
  21507. sliding_block_size(textanchor%))
  21508. clear_mem(SHrecptr%,0,
  21509. sliding_block_size(recanchor%))
  21510. read_print_options(dest$,printW%,printerW%)
  21511. =1 Count%=0:TextPtr%=SHtextptr%
  21512.  S%=0 
  21513.  Scrollnum%-1
  21514.   scrolldata%(S%,9)=0
  21515. =5Bmaxlen%()=len%():truelen%()=0:diff%()=0:Tab2%()=0:maxlenP%()=0
  21516. =6-LenLineP%=0:pagecolumn%=0:header_lines%=0
  21517. direct_print(from%,to%)
  21518.  I%,L%,N%,lastprintable%,term%,S$,M$,more%
  21519.  pause% 
  21520.   pagenumber%>1 
  21521. =<c  
  21522. confirm(
  21523. msg("Err219,"+
  21524. (pagenumber%))) 
  21525.  moan_err%,
  21526. msg("Err220") 
  21527.  "Hourglass_On"
  21528. fit_page
  21529.  format$="vert" 
  21530.  LenLineP%=xlimit% 
  21531.  LenLineP%=
  21532. (maxlenP%())
  21533. term%=xlimit% 
  21534.  pointsize%
  21535.  term%>400 
  21536.  term%=400
  21537.  term%>LenLine% 
  21538.  term%=LenLine%-1
  21539.  LenLineP%>xlimit% 
  21540. =D/  newsize%=(pointsize%*xlimit%) 
  21541.  LenLineP%
  21542. =EG  
  21543.  newsize%<6 
  21544. msg("Err196") 
  21545. msg("Err197,"+
  21546. (newsize%))
  21547.  format$ 
  21548.  "horiz","table":
  21549. =H        
  21550. =I8      lastprintable%+=1:L%+=maxlenP%(lastprintable%)
  21551. =J2    
  21552.  lastprintable%=PrintFields% 
  21553.  L%>xlimit%
  21554.  L%>xlimit% 
  21555.       S$=" "
  21556. =M,      
  21557.  I%=lastprintable% 
  21558.  PrintFields%
  21559. =N(        F%=
  21560. fnum(
  21561. Form$,(2*I%)-1,2))
  21562.         S$+=Tag$(F%)+"\"
  21563.       
  21564.       S$=
  21565. =R3      
  21566.  lastprintable%<PrintFields% 
  21567.  S$="s"+S$
  21568. =S        
  21569.  "vert":
  21570.  I%=1 
  21571.  PrintFields%
  21572. =V&      F%=
  21573. fnum(
  21574. Form$,(2*I%)-1,2))
  21575. =W;      
  21576.  maxlen%(F%)>L% 
  21577.  L%=maxlen%(F%):S$=" "+Tag$(F%)
  21578.  pagenumber%=1 
  21579. =[i    
  21580. confirm(
  21581. msg("Err95,"+
  21582. (pointsize%)+","+S$+","+M$))=
  21583.  printing%=
  21584.  moan_err%,
  21585. msg("Err220")
  21586. =]#  
  21587.  lastprintable%=PrintFields%
  21588.  format$="table" 
  21589.  xstart%+=4
  21590.  "ColourTrans_SetGCOL",0,0,0,0,0
  21591.  rect%=1 
  21592.  printcolumns%
  21593.   origin%=origin%(rect%)
  21594. =cU  
  21595.  "PDriver_GiveRectangle",rect%,rectangle%,transform%,origin%(rect%),&FFFFFF00
  21596.  rect%
  21597.  "PDriver_DrawPage",copies%,rectangle2%,0,0 
  21598.  more%,,rect%
  21599.  more%
  21600. =g(  first%=from%+pagelength%*(rect%-1)
  21601. =hI  
  21602.  to%-first%+1<pagelength% 
  21603.  last%=to% 
  21604.  last%=first%+pagelength%-1
  21605. =i)  TextPtr%=SHtextptr%+first%*LenLine%
  21606. draw_page
  21607. =k;  
  21608.  "PDriver_GetRectangle",,rectangle2% 
  21609.  more%,,rect%
  21610.  sorton%=0 
  21611. =n4  Count%=0:labcount%=0:pagecolumn%=0:Label$()=""
  21612. =oB  SHtextptr%=
  21613. extend_named_sliding_block(textanchor%,SHclaim%)
  21614. =p?  
  21615. clear_mem(SHtextptr%,0,
  21616. sliding_block_size(textanchor%))
  21617.   TextPtr%=!textanchor%
  21618. draw_page
  21619.  line%,xmax%,ymin%,rows%
  21620. =w&rows%=last%-first%-header_lines%+2
  21621. =x-ymin%=ystart%-(last%-first%)*linedepth%-8
  21622.  format$ 
  21623. =z.  
  21624.  "label":
  21625. print_labels(xstart%,ystart%)
  21626.  line%=first% 
  21627.  last%
  21628. =}*    
  21629. print_line(xstart%,ystart%,xmax%)
  21630.     TextPtr%+=LenLine%
  21631.  line%
  21632.  format$ 
  21633.  "table":
  21634. table_grid(xmax%+spacerlen%,ymin%,rows%,tablecolumns%,tablecolumnwidth%)
  21635.  "horiz":
  21636.  vrules% 
  21637.     h%=linedepth%*(rows%+1)
  21638. #    x%=xstart%-(spacerlen% 
  21639.     y%=ymin%+22
  21640. !    
  21641. vertical_rules(x%,y%,h%)
  21642. print_line(x0%,y0%,
  21643.  xmax%)
  21644.  F%,P%,R%,chars%,width%,x%,x1%,y%,w%,font%,colour%,ptr%
  21645. +x%=x0%:y%=y0%-(line%-first%)*linedepth%
  21646. 0SHrecptr%=!recanchor%:R%=SHrecptr%!(line%*4)
  21647.  -1,-2:font%=headerfont%:colour%=headercol%
  21648.  No font: rule
  21649. :font%=bodyfont%:colour%=bodycol%
  21650. TextPtr%?term%=13
  21651.  R%=-3:
  21652.  rule off
  21653.  "Wimp_SetColour",rulewimpcol%
  21654.  x%,y%+linedepth% 
  21655.  BY LenLineP%,0
  21656.  R%=-2:
  21657.  No columns: print whole line
  21658. font_print(TextPtr%,0,x%,y%,font%,colour%)
  21659.  format$="vert":
  21660.   chars%=Tab%(2)-Tab%(1)
  21661. 5  w%=
  21662. how_wide("",TextPtr%,chars%,headerfont%,-1)
  21663.   x%=x0%+maxlenP%(1)-w%
  21664.  chars%>0 
  21665. font_print(TextPtr%,chars%,x%,y%,headerfont%,headercol%):x%+=w%+8
  21666. !  Q%=Tab%(2):ptr%=TextPtr%+Q%
  21667.  P%=0
  21668.  P%+=1
  21669. "    
  21670.  ptr%?P%=160 
  21671.  ptr%?P%=13
  21672. C    
  21673.  Check for concatenation. A CHR$(160) precedes next header
  21674.  ptr%?P%=160 
  21675. 7      
  21676. font_print(ptr%,P%,x%,y%,bodyfont%,bodycol%)
  21677. 8      w%=
  21678. how_wide("",ptr%,P%,bodyfont%,-1):x%+=w%+8
  21679.       ptr%+=P%:P%=0
  21680.       
  21681.  P%+=1
  21682.       
  21683.  ptr%?(P%+1)=160
  21684. 5      
  21685.  "tail" of header ends with this character
  21686. =      
  21687. font_print(ptr%,P%+1,x%,y%,headerfont%,headercol%)
  21688. :      w%=
  21689. how_wide("",ptr%,P%,headerfont%,-1):x%+=w%+8
  21690.       Q%=P%-1:ptr%+=P%+1
  21691.         
  21692.  ptr%?P%=13
  21693. font_print(ptr%,0,x%,y%,bodyfont%,bodycol%)
  21694.  Print in columns
  21695.  F%=1 
  21696.  lastprintable%
  21697.     width%=maxlenP%(F%)
  21698.     P%=TextPtr%+Tab%(F%)
  21699. "    chars%=Tab%(F%+1)-Tab%(F%)
  21700.  numeric%(F%) 
  21701. -      w%=
  21702. how_wide("",P%,chars%,font%,-1)
  21703.       x1%=(width%-w%)
  21704.       
  21705.  x1%=0
  21706.         
  21707. 6    
  21708. font_print(P%,chars%,x%+x1%,y%,font%,colour%)
  21709.     x%+=width%
  21710.  x%>xmax% 
  21711.  xmax%=x%
  21712. get_document_size(
  21713.  "PDriver_PageSize" 
  21714. ,w%,h%,l%,b%,r%,t%
  21715.  "Font_ConverttoOS",,w%,h% 
  21716.  ,w%,h%
  21717.  "Font_ConverttoOS",,l%,r% 
  21718.  ,l%,r%
  21719.  "Font_ConverttoOS",,t%,b% 
  21720.  ,t%,b%
  21721. fit_page
  21722.  x%,y%,w%,column%
  21723.  orientation$ 
  21724.  "upright":
  21725. C  w%=(right%-left%-(gutter%*(printcolumns%-1))) 
  21726.  printcolumns%
  21727.   rectangle%!0=0
  21728.   rectangle%!4=0
  21729.   rectangle%!8=w%
  21730.    rectangle%!12=top%-bottom%
  21731.  column%=1 
  21732.  printcolumns%
  21733. 5    x%=left%+(w%+gutter%)*(column%-1):y%=bottom% 
  21734. P    
  21735.  "Font_Converttopoints",,x%,y% 
  21736.  ,!origin%(column%),origin%(column%)!4
  21737.  column%
  21738.   transform%!0=(1<<16)
  21739.   transform%!4=0
  21740.   transform%!8=0
  21741.   transform%!12=(1<<16)
  21742. <  xstart%=4:ystart%=top%-bottom%-linedepth%:xlimit%=w%-8
  21743.  "sideways":
  21744. C  w%=(top%-bottom%-(gutter%*(printcolumns%-1))) 
  21745.  printcolumns%
  21746.   rectangle%!0=0
  21747.   rectangle%!4=0
  21748.   rectangle%!8=w%
  21749.    rectangle%!12=right%-left%
  21750.  column%=1 
  21751.  printcolumns%
  21752. 7    x%=right%:y%=bottom%+(w%+gutter%)*(column%-1)  
  21753. P    
  21754.  "Font_Converttopoints",,x%,y% 
  21755.  ,!origin%(column%),origin%(column%)!4
  21756.  column%
  21757.   transform%!0=0
  21758.   transform%!4=(1<<16)
  21759.   transform%!8=-(1<<16)
  21760.   transform%!12=0
  21761. <  xstart%=4:ystart%=right%-left%-linedepth%:xlimit%=w%-8
  21762. get_fonts
  21763. Eheaderfont%=
  21764. get_font($
  21765. text(printerW%,57),pointsize%,pointsize%)
  21766. Cbodyfont%=
  21767. get_font($
  21768. text(printerW%,71),pointsize%,pointsize%)
  21769. -keyfont%=
  21770. get_font("Homerton.Medium",4,4)
  21771. get_font(fontname$,width%,height%)
  21772.  font%
  21773.  "Font_FindFont",,fontname$,width%*16,height%*16 
  21774.  font%
  21775. =font%
  21776. declare_fonts
  21777.  "PDriver_DeclareFont",headerfont%
  21778.  "PDriver_DeclareFont",bodyfont%
  21779.  "PDriver_DeclareFont",keyfont%
  21780.  "PDriver_DeclareFont"
  21781. lose_fonts
  21782.  "Font_LoseFont",headerfont%
  21783.  "Font_LoseFont",bodyfont%
  21784.  "Font_LoseFont",keyfont%
  21785. font_print(P%,L%,x%,y%,font%,fontcol%)
  21786.  byte%,S$
  21787.  L%=0 
  21788.  S$=$P% 
  21789.  byte%=P%?L%:P%?L%=13:S$=$P%:P%?L%=byte% 
  21790.  "ColourTrans_SetFontColours",font%,&ffffff00,fontcol%,14
  21791.  "Font_Paint",font%,S$,16,x%,y%
  21792. how_wide(S$,P%,L%,font%,split%)
  21793.  width%
  21794.  "Font_SetFont",font%
  21795. Ablock%!0=0:block%!4=0:block%!8=0:block%!12=0:block%!16=split%
  21796.  "Font_ScanString",font%,S$,(1<<5)+(1<<18),-1,-1,block%
  21797.  "Font_ScanString",font%,P%,(1<<5)+(1<<7)+(1<<18),-1,-1,block%,,L%
  21798. width%=block%!28-block%!20
  21799.  "Font_ConverttoOS",,width% 
  21800.  ,width%
  21801. =width%+4
  21802. table_grid(x%,y%,rows%,columns%,colwidth%)
  21803.  width%,height%,C%,R%
  21804.  rows%<=0 
  21805. >!*width%=x%-xstart%+4+colwidth%*columns%
  21806. height%=linedepth%*rows%
  21807.  "Wimp_SetColour",rulewimpcol%
  21808.  xstart%-4,y%,width%,height%
  21809.  xstart%-4,y%-linedepth%
  21810.  R%=1 
  21811.  rows%+1
  21812. >'4  
  21813.  BY 0,linedepth%:
  21814.  BY width%,0:
  21815.  BY -width%,0
  21816. vertical_rules(xstart%-(spacerlen% 
  21817.  2),y%,height%)
  21818.  x%-colwidth%,y%
  21819.  C%<columns%
  21820.   C%+=1
  21821. >-5  
  21822.  BY colwidth%,0:
  21823.  BY 0,height%:
  21824.  BY 0,-height%
  21825. vertical_rules(x%,y%,height%)
  21826.  "Wimp_SetColour",rulewimpcol%
  21827.  x%,y%
  21828.  F%<PrintFields%
  21829. >78  
  21830.  BY maxlenP%(F%),0:
  21831.  BY 0,height%:
  21832.  BY 0,-height%
  21833.   F%+=1
  21834. memory_usage
  21835.  F,R,f$,S$,P%
  21836. f$=$database%+".MemoryUsed"
  21837. (f$):
  21838.  F=0 
  21839. #F,"Database: "+
  21840. leaf($database%)+" ("+
  21841. $+")"
  21842. #F,"(Record has "+
  21843. (fields%)+" fields and is "+
  21844. (Length%)+" [&"+
  21845. ~(Length%)+"] bytes long)"
  21846. N%=((
  21847. )+1024) 
  21848.  1024
  21849. #F,"Program size: "+
  21850. (N%)+"K"
  21851. N%=((
  21852. P)+1024) 
  21853.  1024
  21854. #F,"Basic variables: "+
  21855. (N%)+"K"
  21856. N%=((
  21857. )+1024) 
  21858.  1024
  21859. ("<Pbase$Dir>.!Run")
  21860.   S$=
  21861. S$,8)="WimpSlot"
  21862. close_file(R)
  21863. S$,"K")-3
  21864. #F,"Program + variables: "+
  21865. (N%)+"K (Wimpslot = "+
  21866. S$,P%,4)+")"
  21867. >N@A%=indirectionmem% 
  21868.  1024:N%=((buff%-buffbase%)+1024) 
  21869.  1024
  21870. >OIM%=endbuff%-buff%:
  21871.  M%<1024 
  21872. (M%)+" bytes" 
  21873.  1024)+"K"
  21874. #F,"Icon indirection: "+
  21875. (A%)+"K allocated, "+M$+" left"
  21876. A%=menumem% 
  21877.  1024
  21878. >RLM%=men_end%-men_top%:
  21879.  M%<1024 
  21880. (M%)+" bytes" 
  21881.  1024)+"K"
  21882. #F,"Menus: "+
  21883. (A%)+"K allocated, "+M$+" left"
  21884. close_file(F)
  21885.  "OS_File",18,f$,&fff
  21886. check_resources
  21887.  f$,imissing$,rmissing$,rpath$,ipath$,d%
  21888. >ZArpath$="<PBase$Dir>.Resources.":ipath$="<PBase$Dir>.Initial."
  21889.  f$<>"*"
  21890. >^#  
  21891.  "OS_File",5,rpath$+f$ 
  21892.  d%=0 
  21893. >`%    
  21894.  "OS_File",5,ipath$+f$ 
  21895. >a_    
  21896.  d%=1 
  21897.  "OS_CLI","Copy "+ipath$+f$+" "+rpath$+f$+" ~C~V" 
  21898.  imissing$+=""""+f$+""","
  21899.  f$  
  21900. imissing$=
  21901. imissing$)
  21902.  f$<>"*"
  21903. >h#  
  21904.  "OS_File",5,rpath$+f$ 
  21905. >i'  
  21906.  d%=0 
  21907.  rmissing$+=""""+f$+""","
  21908. rmissing$=
  21909. rmissing$)
  21910.  imissing$<>"" 
  21911.  0,imissing$+" missing from "+program$+".Initial. Please consult Powerbase Support"
  21912.  rmissing$<>"" 
  21913.  0,rmissing$+" missing from "+program$+".Resources. Please consult Powerbase Support"
  21914.  !PrintOpts,Config,CSVoptions,FieldCols,Fkeys,GridOpts,Preference,*
  21915.  Dial,Help,HelpReader,Info,Internet,KeyList,Messages,Sprites,Sprites22
  21916.  Templates,UserMenu,ValStrings,Modules.ImpulseII,Modules.SlidingHp
  21917.  Objects.Draw,Objects.Sprite,Objects.Text,Temp.!Run
  21918.  Temp.!Sprites,Temp.!Sprites22,*
  21919. >t+Tools%=2:MaxLibs%=10:CustDir$=PbaseDir$
  21920. compare_paths(file$,database$)
  21921.  P%,Q%,L%,C$,P$,T$,leaf$
  21922.  Remotepath$="Absolute" 
  21923. =file$
  21924. >z%P%=
  21925. file$,"$"):Q%=
  21926. database$,"$")
  21927. file$,P%)<>
  21928. database$,Q%) 
  21929. =file$
  21930.  Not on same filing system: can't use relative path
  21931. leaf$=
  21932. leaf(file$)
  21933.  leafnamepath$=database$+".PrintRes" 
  21934. =leaf$
  21935.  leafnamepath$=database$ 
  21936. leaf(database$)+"."+leaf$
  21937. P$="^."
  21938.   P%+=1
  21939.   C$=
  21940. file$,P%,1)
  21941.  C$="." 
  21942.  L%=Q%:Q%=P%+1
  21943.  C$<>
  21944. database$,P%,1)
  21945. file$,L%)
  21946.   P%=
  21947. database$,".",P%+1)
  21948.  P%>0 
  21949.  P$+="^."
  21950.  P%=0
  21951. T$,".")
  21952. T$,P%+1)
  21953. =P$+T$
  21954. add_button(wi%,S$,type$,grey%,x%,y%,W%)
  21955.  Do not remove or alter this procedure!
  21956.  ic%,L%
  21957. (S$)+1
  21958.  W%=0 
  21959. .  W%=
  21960. string_width(S$)+8:
  21961.  W%<144 
  21962.  W%=144
  21963.  type$ 
  21964.  "menu":
  21965.  wi%=keypadW% 
  21966. 1    
  21967. (name$+"window%")=-1 
  21968.  toolheight%+=52
  21969. !    x%=xm%:y%=ym%:W%=44:S$=""
  21970. _  ic%=
  21971. create_icon(0,wi%,x%,y%,W%,44,&17003133,"",buff%,valid%(33),1):$buff%=S$:buff%+=L%+1
  21972.  "window":
  21973.  wi%=keypadW% 
  21974. /    
  21975. (name$+"menu%")=-1 
  21976.  toolheight%+=52
  21977. !    x%=xw%:y%=yw%:W%=44:S$=""
  21978. [  ic%=
  21979. create_icon(0,wi%,x%,y%,W%,44,&17003133,"",buff%,winsp%,1):$buff%=S$:buff%+=L%+1
  21980.  Tools% 
  21981. #    
  21982.  No keypad or toolpane
  21983.  wi%=keypadW% 
  21984. &      
  21985.  button%=0 
  21986.  padheight%+=52
  21987. +      x%=8+button%*166:y%=-padheight%+6
  21988. !      button%=(button%+1) 
  21989. ?    
  21990.  wi%=keypadW% 
  21991.  toolheight%+=52:x%=4:y%=-toolheight%+2
  21992.  type$ 
  21993.  "option":
  21994. e    ic%=
  21995. create_icon(0,wi%,x%,y%,144,48,&1700B133,"",buff%,valid%(82),L%+1):$buff%=S$:buff%+=L%+1
  21996.  "radio":
  21997. "    $buff%="Sradiooff,radioon"
  21998. i    ic%=
  21999. create_icon(0,wi%,x%,y%,144,48,&1701B133,"",buff%+18,buff%,L%+1):$(buff%+18)=S$:buff%+=L%+19
  22000. d    ic%=
  22001. create_icon(0,wi%,x%,y%,W%,48,&1700353D,"",buff%,valid%(32),L%+1):$buff%=S$:buff%+=L%+1
  22002. shade(wi%,ic%,
  22003.  grey%)
  22004. find_libraries(dir$,
  22005.  NX%,N%)
  22006.  L%,d%,R4%,name$,f$,flag%
  22007.  "OS_GBPB",9,dir$,block%,1,R4%,255 
  22008.  ,,name$,,R4%
  22009.  R4%<>-1
  22010. /  f$=dir$+"."+name$+".Customise."+
  22011. name$,2)
  22012.  "OS_File",5,f$ 
  22013.  d%,,,,L%
  22014.  d%=0 
  22015.  f$=dir$+"."+name$+".Customise.Demo":
  22016.  "OS_File",5,f$ 
  22017.  d%,,,,L%
  22018.  d%=1 
  22019.  NX%<N% 
  22020.       
  22021. unique(f$,NX%+1) 
  22022. 8        
  22023.  Don't store a given library more than once
  22024.         lib$(NX%)=f$:NX%+=1
  22025.         
  22026.  L%>M% 
  22027.  M%=L%
  22028.       
  22029. 2      
  22030.  flag% 
  22031. softerror("",236):flag%=
  22032.         
  22033.  "OS_GBPB",9,dir$,block%,1,R4%,255 
  22034.  ,,name$,,R4%
  22035.  M%>0 
  22036.  lib$()
  22037. unique(f$,N%)
  22038.  lib$,flib$,ok%,l$
  22039. flib$=
  22040. leaf(f$)
  22041.    N%-=1:lib$=
  22042. leaf(lib$(N%))
  22043.  N%=0 
  22044.  lib$=flib$
  22045.  lib$=flib$ 
  22046.  ok%=
  22047.  ok%=
  22048.  ok% 
  22049. lit(utilityM%,10,
  22050. lit(iconbarM%,2,
  22051.